首先,在plunker: http://plnkr.co/edit/v1uTz5
这是我遇到的问题进行工作演示。
我有一个ng-include
到包括部分。
里面的部分我有一个文本输入ngModel
和指导。
该模型相应地更新里面包括但外面的任何交互包括被忽略。 该{{test}}
外的包括不更新,但{{test}}
里面呢。
该指令被调用时,处理enter
键并调用正确的范围和功能。 然而, $scope.test
变量从未更新过,但$scope.testFinal
更新和ng-include
模板,可以正确地呈现它。 试图重设$scope.test
模型也不起作用。
我失去了一些东西在这里? 或者这是与指令或与错误ng-include
?
代替使用primitiive来定义可变的,使其成为对象。
$scope.model={test:''};
指令为每个项目自身的范围。 当你相当于原始到一个新的作用域变量,它没有绑定到原来的,然而,当原来是一个对象,创建一个参考,而不是副本,并在一个所做的更改将反映其他
简略说明例如:
var a ='foo';
var b= a;
/* now change a*/
a='bar';
alert( b) // is still 'foo'
现在做相同的对象:
var obj_1= {a:'foo'};
var obj_2=obj_1;
/* now change obj_1.a*/
obj_1.a='bar';
alert( obj_2.a) // change to obj_1 will also change obj_2 and alert returns "bar"*/
您Plunker修改
阅读这篇文章,对角维基更详细的解释
约翰·林德奎斯特有视频了。 虽然他并没有完全解释为什么你需要使用一个对象。
基本上每有一个新的非隔离范围时,父范围的每个属性将被复制到新的范围,并为@charlietfl解释,复制原始类型确实创造了一个“副本”,但使用对象,你得到的是一个参考,因此变化是全球性的 。
ng-include
创建自己的范围,它比外部范围不同。 使用this.test
代替$scope.test
内ng-include
模板。 它会正常工作。