2016-06-22 15 views
0

Ich habe ein paar Fragen. Pls sie unten finden -Angular JS - deklarierende Funktion innerhalb von ng-init?

1) Eine Funktion innerhalb eines ng-init definiert wie unter

gegeben
ng-init='function a() {}' 

Fehler aus. Auch das Ändern der Syntax in den Variablendeklarationstyp oder den sofort aufgerufenen Typ funktioniert nicht. Warum? Da können wir sowieso eine Variable, ein Objekt, ein Array deklarieren. Warum nicht eine Funktion?

2) Wird eine $ watch für alle Variablen erstellt, die an einen Bereich gebunden sind ODER wird sie nur für die Bereichsvariablen erstellt, die in der Ansicht angezeigt werden?

3) Wenn Sie die Fiddle 'http://jsfiddle.net/Lvc0u55v/5753/' ausführen, gibt es> 10 $ Digest Iterations Fehler. Dies wird erwartet. Jetzt kommentieren und kommentieren Sie bitte wie in der Geige angegeben. Es gibt keinen Fehler, wie kommt es? hier ändert sich auch der Wert von $ scope.a unendlich oder?

Antwort

1

Lassen Sie mich versuchen, Ihre Fragen beantwortet zu bekommen.

1) Soweit ich weiß, ng-init soll nicht mit Funktionsausdrücken arbeiten. Es wird eher verwendet, um logische Ausdrücke zu behandeln. Sie können einen Blick in die docs werfen, es wird auch darauf hingewiesen, einschließlich eines kurzen Beispiels. So wie das Dokument sagt:

Die ngInit-Direktive ermöglicht es Ihnen, einen Ausdruck im aktuellen Bereich auszuwerten.

2) Im Allgemeinen wird ein $watch wird jede Variable eines Umfangs nicht gebunden (auch wenn es zu einem ganzen Zyklus verdauen) gebunden werden kann. Wie in Ihrem Beispiel haben Sie $watch an Ihre Bereichsvariable a gebunden. Es wird also jedes Mal ausgelöst, wenn sich Ihre $scope.a Variable ändert. Sie können auch die docs hier überprüfen.

3) In Bezug auf diese Frage ist die Antwort ziemlich einfach. Nehmen wir an, wir beginnen mit $scope.a = 10 (wie Sie bereits getan haben). In dem Moment, in dem Sie Ihre App laufen lassen, wird Ihr $watch ziemlich feuern. Dadurch erhalten Sie die folgende erhalten:

nv = 10; 
ov = 10; 
$scope.a = ov * 9; 

dass Unter der Annahme, you'r $scope.a jetzt 90 sein wird, was natürlich Ihre Beobachter wird Feuer wieder. Dieses Mal mit den folgenden:

nv = 90; 
ov = 10; 
$scope.a = ov * 9; 

Nun, an diesem Punkt ist Ihr neuer Wert der gleiche wie zuvor. Bei dieser Rate wird Ihr Beobachter nicht mehr feuern, da sich der Wert nicht ändert (da es genau so ist wie zuvor).

Auf der anderen Seite, $scope.a = nv * 9 läuft immer $scope.a und diese aktualisiert würde zu einer Endlosschleife führen.

Ich hoffe, das hilft.

+0

Für Punkt # 2, wenn ich eine Variable $ scope.b in meinem Controller deklariert und nicht gebunden wie {{b}} gebunden, dann ist ein Beobachter an 'b' gebunden? –

+0

Nein, ist es nicht.Ein Beobachter ist nur ein Listener, der an ein bestimmtes Objekt gebunden werden kann. Du erreichst das, indem du $ scope machst. $ Watch (OBJECT-HIER, ...). In deiner Geige hast du einen Beobachter an deine sehr spezifische Variable $ scope.a gebunden, indem du 'a' in deinen Beobachter hinzugefügt hast. – Aer0

+0

Oh, k ... mein schlechtes, dass ich nicht explizit gefragt habe. Bitte beziehen Sie sich auf jsfiddle - http://jsfiddle.net/Lvc0u55v/5762/. In diesem Code gibt es keine expliziten Beobachter. Aber Beobachter würden von Angular hinzugefügt werden, richtig? Meine Frage ist also, ob Beobachter nur durch eckige Variablen zu den Variablen 'Name' und 'Firma' oder gar 'Alter' hinzugefügt werden. Hoffe ich bin klarer. –