尝试在使用原始对象时对AngularJS指令进行双向绑定不起作用,例如:
<custom-directive ng-model="variable"></custom-directive>
如何实现这一目标?
答案 0 :(得分:5)
为了在javascript(不仅仅是angularjs)中进行双向绑定,我们必须传递一个对象(这是由javascript&#39的评估策略引起的 - 可以在这里阅读更多关于它https://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_sharing)。基本上发生的事情是,当我们传递一个原始变量时,它已经被值传递并重新创建,而不是通过引用传递。只有对象通过引用传递。
因此,可以通过传递变量的父对象来解决此问题,例如:
<custom-directive ng-model-name="variable" ng-model-parent="parentObj"></custom-directive>
然后,在指令中的对象中修改如下:
parentObj[variable] = "whatever";
这样,我们将保持变量与parentObj之间的连接。
另一种选择是使用父obj传递模型,例如:
<custom-directive ng-model="parentObj.variable"></custom-directive>
点是此示例的重要部分。它实际上是angular的最佳实践,总是使用parentObj-dot-property传递变量。
有关其他信息,angularjs实际上有关于它的文档https://github.com/angular/angular.js/wiki/Understanding-Scopes
答案 1 :(得分:0)
我刚刚意识到如果你的指令不在ng中 - 如果它可以用于原始绑定。也许问题是你的绑定在ng-if里面。尝试使用ng-show代替。也许它会起作用。
以这种方式传递原语:
<custom-directive ng-model="parentObj.variable"></custom-directive>