18

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

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

我必须ng-include包括一个部分。

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

模型在包含内相应地更新,但包含外的任何交互都将被忽略。包含的{{test}}外部不会更新,但{{test}}内部会更新。

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

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

4

3 回答 3

31

不要使用原语来定义变量,而是让它成为一个对象。

$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 已修改

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

于 2013-04-10T21:56:40.640 回答
5

John Lindquist 有一个关于它的视频。尽管他并没有完全解释为什么你需要使用一个对象。

基本上每次有一个新的非隔离作用域时,父作用域的每个属性都会被复制到新作用域,正如@charlietfl 解释的那样,复制原始类型确实会创建一个“副本”,但是对于对象,你得到的是一个参考,因此变化是全局的。

于 2013-08-13T22:56:27.413 回答
1

ng-include创建自己的范围,它与外部范围不同。使用this.test而不是$scope.test内部ng-include模板。它会正常工作。

于 2015-06-22T08:20:40.717 回答