/ / access scope Variable von der Direktive nach Name, wobei Eval - Javascript, Anglejs, Anglejs - Scope vermieden wird

Zugriff auf die Gültigkeitsbereichsvariable von der Direktive nach Name, wobei die Verwendung von eval - javascript, angularjs, angularjs-scope vermieden wird

Ich bin neu bei angleJs und dem aktuell funktionierendes Beispiel (Geige) fühlt sich nicht richtig an. Wenn Sie versuchen, das Feld unscharf zu machen, sollte es zunehmen event.timesderzeit mache ich es durch $apply in Zeile 10, also frage ich mich, gibt es einen besseren Weg, um dies zu erreichen? var times = scope.$get(attrs.timesField); und dann scope.$apply(function(){ times += 1; });

Antworten:

3 für die Antwort № 1

Immer, wenn eine Direktive keinen isolierten Bereich verwendet und Sie eine Bereichseigenschaft mit einem Attribut angeben und Sie den Wert dieser Eigenschaft ändern möchten, verwenden Sie $ parse:

<input custom-field times-field="event.times" ng-model="event.title" type="text">

link: function (scope, element, attrs){
var model = $parse(attrs.timesField);
element.bind("blur", function(){
model.assign(scope, model(scope) + 1);
scope.$apply();
});
}

Geige


0 für die Antwort № 2

Du hast recht, das ist nicht der richtige Weg, so etwas zu tun. Finde das heraus $ watch () Funktion, besonders wenn es in verwendet wird Richtlinien.


0 für die Antwort № 3

Eval muss hier nicht verwendet werden, Sie können dies einfach tun:

           scope.$apply(function(){
scope.event.times++;
});

Sie müssen jedoch sicherstellen, dass ein Ereignisobjekt im Gültigkeitsbereich vorhanden ist, bevor Sie diese Direktive verwenden. Ich glaube nicht, dass es für eine Direktive gut ist, sich auf Daten zu verlassen, die an anderer Stelle gesetzt werden.

Was willst du eigentlich erreichen?