Ich versuche herauszufinden, ob es eine einfache Möglichkeit gibt, über eine externe Javascript-Funktion auf den internen Bereich eines Controllers zuzugreifen (für den Ziel-Controller völlig irrelevant).
Ich habe hier bei ein paar anderen Fragen gesehen, dass
angular.element("#scope").scope();
würde den Bereich von einem DOM-Element abrufen, aber meine Versuche führen derzeit zu keinen richtigen Ergebnissen.
Hier ist die jsfiddle: http://jsfiddle.net/sXkjc/5/
Ich mache gerade einen Übergang von einfachem JS zu Angular durch. Der Hauptgrund, warum ich dies erreichen möchte, besteht darin, meinen ursprünglichen Bibliothekscode so intakt wie möglich zu halten. Ich muss nicht jede Funktion zur Steuerung hinzufügen.
Irgendwelche Ideen, wie ich das erreichen könnte? Kommentare zu der obigen Geige sind ebenfalls willkommen.
quelle
.scope()
die Debug-Daten aktiviert sein, die Verwendung von Debug-Daten in der Produktion wird jedoch aus Geschwindigkeitsgründen nicht empfohlen . Die folgenden Lösungen scheinen sich umscope()
Antworten:
Sie müssen $ scope. $ Apply () verwenden, wenn Sie Änderungen an einem Bereichswert vornehmen möchten, die außerhalb der Kontrolle von anglejs liegen, wie z. B. einem jquery / javascript-Ereignishandler.
Demo: Fiddle
quelle
angular.element("#scope")
funktioniert nicht, obwohlangular.element($("#scope"))
funktioniert, müssen Sie auch jquery habenEs ist schon eine Weile her, dass ich diese Frage gestellt habe, aber angesichts der Ansichten, die dies immer noch zu bekommen scheint, ist hier eine andere Lösung, auf die ich in den letzten Monaten gestoßen bin:
Der obige Code erstellt im Grunde eine Funktion namens
safeApply
, die die$apply
Funktion aufruft (wie in Aruns Antwort angegeben), wenn und nur Angular derzeit die Phase nicht durchläuft$digest
. Wenn Angular jedoch gerade Dinge verdaut , führt es die Funktion einfach so aus, wie sie ist, da dies ausreicht, um Angular zu signalisieren, die Änderungen vorzunehmen.Beim Versuch, die
$apply
Funktion zu verwenden, während AngularJs sich derzeit in der$digest
Phase befindet , treten zahlreiche Fehler auf . DersafeApply
obige Code ist ein sicherer Wrapper, um solche Fehler zu vermeiden.(Hinweis: Ich persönlich mag es, aus Bequemlichkeitsgründen
safeApply
als Funktion von$rootScope
einzusteigen)Beispiel:
Demo: http://jsfiddle.net/sXkjc/227/
quelle
Ein anderer Weg, dies zu tun, ist:
quelle
wir können es nach dem Laden nennen
http://jsfiddle.net/gentletech/s3qtv/3/
quelle
Es ist lange her, dass ich diese Frage gestellt habe, aber hier ist eine Antwort, für die keine Abfrage erforderlich ist:
quelle
Hier ist eine wiederverwendbare Lösung: http://jsfiddle.net/flobar/r28b0gmq/
quelle
Sie können auch versuchen:
quelle
Die akzeptierte Antwort ist großartig. Ich wollte sehen, was mit dem Angular-Bereich im Kontext von passiert
ng-repeat
. Die Sache ist, Angular erstellt einen Unterbereich für jedes wiederholte Element. Wenn Sie eine im Original definierte Methode aufrufen$scope
, behält diese ihren ursprünglichen Wert bei (aufgrund des Schließens von Javascript). Dasthis
bezieht sich jedoch auf den aufrufenden Bereich / das aufrufende Objekt. Das funktioniert gut aus, so lange , wie Sie sind klar, wann$scope
undthis
gleich sind und wenn sie verschieden sind. hthHier ist eine Geige, die den Unterschied veranschaulicht: https://jsfiddle.net/creitzel/oxsxjcyc/
quelle
Ich bin Neuling, tut mir leid, wenn es eine schlechte Praxis ist. Basierend auf der gewählten Antwort habe ich diese Funktion ausgeführt:
Ich benutze es so:
Übrigens, entschuldige mein Englisch
quelle
Zugriff auf den Bereichswert
Angenommen, programRow.StationAuxiliaryTime ist ein Array von Objekten
quelle
Wir müssen Angular Js verwenden, die in die Funktion $ apply für Zugriffsbereichsvariablen oder Funktionen außerhalb der Controller-Funktion integriert sind.
Dies kann auf zwei Arten erfolgen:
| * | Methode 1: Verwenden der ID:
| * | Methode 2: Verwenden von init von ng-controller:
quelle