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

Tim*_*ers 18 angularjs angularjs-scope angular-ngmodel

首先,最重要的是,plpler:http://plnkr.co/edit/v1uTz5

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

我有一个ng-include包括部分.

在部分内部我有一个带ngModelAND指令的文本输入.

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

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

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

cha*_*tfl 30

而不是使用原始定义变量,使其成为一个对象.

$scope.model={test:''};
Run Code Online (Sandbox Code Playgroud)

指令为每个项目创建自己的范围.当你相当于原始到一个新的作用域变量,它没有绑定到原来的,然而,当原来是一个对象,创建一个参考,而不是副本,并在一个所做的更改将反映其他

简单的解释示例:

var a ='foo';
var b= a;
/* now change a*/
a='bar';
alert( b) // is still 'foo'
Run Code Online (Sandbox Code Playgroud)

现在用对象做同样的事情:

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"*/
Run Code Online (Sandbox Code Playgroud)

你的Plunker修改

阅读有关angular wiki的这篇文章以获得更详细的解释


7hi*_*4g0 5

John Lindquist有一个关于它的视频.虽然他没有完全解释为什么你需要使用一个对象.

基本上每次有一个新的非隔离范围时,父范围的每个属性都会被复制到新范围,正如@charlietfl所解释的那样,复制一个基本类型确实会创建一个"副本",但是你得到的对象是一个参考因此,这些变化是全球性的.