2016-06-28 5 views
1

Den Versuch, 2-Wege-Bindung an einer AngularJS Richtlinie zu haben, während primitive Objekte mit nicht funktioniert, zum Beispiel:Zweiweg-Bindung auf primitive Variablen in AngularJS Richtlinie

<custom-directive ng-model="variable"></custom-directive> 

, wie dies erreicht werden kann?

+1

Gute Praxis ist entweder 'Dot rule' zu ​​verwenden (durch Objekt definieren) /' controllerAs' Syntax während Controller definieren –

Antwort

2

Um eine 2-Wege-Bindung in Javascript (nicht nur angularjs) zu haben, müssen wir ein Objekt übergeben (dies wird durch Javascript Auswertungsstrategie verursacht - kann hier mehr darüber lesen https://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_sharing). Im Grunde genommen passiert Folgendes: Wenn wir eine Primitivvariable übergeben, wird sie als Wert übergeben und neu erstellt, anstatt als Referenz übergeben zu werden. Nur Objekte werden als Referenz übergeben.

So kann dieses Problem, indem die Variablen des übergeordnete Objekt gelöst werden, zum Beispiel:

<custom-directive ng-model-name="variable" ng-model-parent="parentObj"></custom-directive> 

und dann wie folgt in der Richtlinie im Objekt ändern:

parentObj[variable] = "whatever"; 

diese Art und Weise, wir wird die Verbindung zwischen der Variablen und dem parentObj beibehalten.

eine weitere Option würde das Modell mit dem Mutter obj werden vorbei, zum Beispiel:

<custom-directive ng-model="parentObj.variable"></custom-directive> 

der Punkt ein wichtiger Teil dieses Beispiels ist. es ist eigentlich eine Best Practice von angular, um Variablen immer mit der parentObj-dot-Eigenschaft zu übergeben.

für weitere Informationen, AngularJS hat tatsächlich eine Dokumentation darüber https://github.com/angular/angular.js/wiki/Understanding-Scopes

-1

Ich habe erkannt, dass, wenn Ihre Richtlinie nicht innerhalb eines ist ng-wenn es mit primitiven Bindungen funktionieren. Vielleicht ist das Problem, dass Ihre Bindung in einem ng-if liegt. Versuchen Sie stattdessen, ng-show zu verwenden. Vielleicht wird es funktionieren.

Vorbei an den primitiven auf diese Weise:

<custom-directive ng-model="parentObj.variable"></custom-directive>

Verwandte Themen