首先,掠夺者:http://plnkr.co/edit/v1uTz5
这是我遇到的问题的工作演示。
我有一个ng-include
来包含部分内容。
在部分内部,我有一个带有ngModel
AND指令的文本输入。
模型在include中相应更新,但忽略了include之外的任何交互。包含之外的{{test}}
不会更新,但内部的{{test}}
会更新。
该指令在被调用时处理enter
键并调用正确的范围和函数。但是,$scope.test
变量从未更新过,但$scope.testFinal
已更新,ng-include
模板已正确呈现。尝试重置$scope.test
模型也不起作用。
我在这里遗漏了什么吗?或者这是指令的错误还是ng-include
?
答案 0 :(得分:30)
不是使用原始来定义变量,而是将其作为对象。
$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"*/
Read this article on angular wiki for more detailed explanation
答案 1 :(得分:5)
John Lindquist有一个video。虽然他没有完全解释为什么你需要使用一个物体。
基本上每次有一个新的非隔离范围时,父范围的每个属性都会被复制到新范围,正如@charlietfl所解释的那样,复制一个原始类型真的会创建一个“副本” “但是对于你得到的对象是一个引用,因此更改是全局。
答案 2 :(得分:1)
ng-include
创建自己的范围,它与外部范围不同。在this.test
模板中使用$scope.test
代替ng-include
。它会正常工作。