Angular - 在ngInclude中调用时,ngModel不会更新

时间:2013-04-10 21:12:09

标签: angularjs angularjs-scope angular-ngmodel

首先,掠夺者:http://plnkr.co/edit/v1uTz5

这是我遇到的问题的工作演示。

我有一个ng-include来包含部分内容。

在部分内部,我有一个带有ngModel AND指令的文本输入。

模型在include中相应更新,但忽略了include之外的任何交互。包含之外的{{test}}不会更新,但内部的{{test}}会更新。

该指令在被调用时处理enter键并调用正确的范围和函数。但是,$scope.test变量从未更新过,但$scope.testFinal已更新,ng-include模板已正确呈现。尝试重置$scope.test模型也不起作用。

我在这里遗漏了什么吗?或者这是指令的错误还是ng-include

3 个答案:

答案 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"*/

Your Plunker Modified

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。它会正常工作。