角 - 内ngInclude调用时ngModel不更新(Angular - ngModel not

2019-08-21 12:53发布

首先,在plunker: http://plnkr.co/edit/v1uTz5

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

我有一个ng-include到包括部分。

里面的部分我有一个文本输入ngModel和指导。

该模型相应地更新里面包括但外面的任何交互包括被忽略。 该{{test}}外的包括不更新,但{{test}}里面呢。

该指令被调用时,处理enter键并调用正确的范围和功能。 然而, $scope.test变量从未更新过,但$scope.testFinal更新和ng-include模板,可以正确地呈现它。 试图重设$scope.test模型也不起作用。

我失去了一些东西在这里? 或者这是与指令或与错误ng-include

Answer 1:

代替使用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修改

阅读这篇文章,对角维基更详细的解释



Answer 2:

约翰·林德奎斯特有视频了。 虽然他并没有完全解释为什么你需要使用一个对象。

基本上每有一个新的非隔离范围时,父范围的每个属性将被复制到新的范围,并为@charlietfl解释,复制原始类型确实创造了一个“副本”,但使用对象,你得到的是一个参考,因此变化是全球性的



Answer 3:

ng-include创建自己的范围,它比外部范围不同。 使用this.test代替$scope.testng-include模板。 它会正常工作。



文章来源: Angular - ngModel not updating when called inside ngInclude