Ich würde gerne einen Bereich in Angular von einer Funktion außerhalb Angular aktualisieren können.Aktualisierung des Umfangs von außerhalb AngularJs ohne Verwendung von "angular.element.scope"
Zum Beispiel, wenn ich ein jQuery-Plugin habe, das einen Erfolgsrückruf zurückgibt, würde ich gerne in der Lage sein, den Bereich von diesem Erfolgsrückruf zu aktualisieren. Jede Lösung, die ich dafür gesehen habe, beinhaltet den Aufruf angular.element(selector).scope
und dann Aufruf $apply
auf den Bereich, der zurückgegeben wird. Ich habe jedoch auch viele Kommentare gesehen, die darauf hinweisen, dass dies nicht funktioniert, wenn die Debug-Informationen deaktiviert sind. Daher wird es nicht empfohlen, aber ich habe keine alternativen Lösungen gesehen.
Kennt jemand eine Möglichkeit, den Bereich außerhalb von Angular zu aktualisieren, ohne angular.element(selector).scope
zu verwenden?
Hier ist die akzeptierte Lösung in der Post.
„Sie müssen $scope.$apply()
verwenden, wenn Sie von außerhalb der Kontrolle von AngularJS wie ein jQuery/Javascript Event-Handler alle Änderungen an einem Umfang Wert machen wollen
function change() {
alert("a");
var scope = angular.element($("#outer")).scope();
scope.$apply(function(){
scope.msg = 'Superhero';
});
}
Hier ist eine Warnung, dass .scope()
funktioniert nicht, wenn Daten Debug-off in der Post ist:
„zu Ihrer Information die Dokumentation nach .scope()
Verwendung erfordert die Debug-Daten ermöglichen werden d aber die Verwendung von Debug-Daten in der Produktion wird aus Gründen der Geschwindigkeit nicht empfohlen. Die Lösungen unten scheinen um Umfang zu drehen() - rtpHarry 5. Dezember '14 um 15:12 Uhr "
Ich sehe keine andere Lösung .scope() in diesem Beitrag oder in anderen ähnlichen Stellen zu verwenden
.AngularJS access scope from outside js function
Dank!
aktualisieren Eine mögliche Lösung nicht mit angular.element(selector).scope
war ich den Umfang in der Steuerung zugewiesen I FirstCtrl
an das Fenster-Objekt wurde. injiziert I $window
in den FirstCtrl
Controller und tat das folgende:
$window.FirstCtrlScope = $scope;
dann von jQuery oder andere Javascript was ich tun konnte:
var scope=window.FirstCtrlScope;
scope.$apply(function() {
// update the scope
});
Ist dies eine gute Lösung oder gibt es bessere Lösungen für einen Bereich zu aktualisieren, ohne angular.element(selector).scope
?
Danke!