Angular - 在 ngInclude 中调用时 ngModel 不更新
Posted
技术标签:
【中文标题】Angular - 在 ngInclude 中调用时 ngModel 不更新【英文标题】:Angular - ngModel not updating when called inside ngInclude 【发布时间】:2013-04-02 22:10:04 【问题描述】:首先是笨蛋:http://plnkr.co/edit/v1uTz5
这是我遇到的问题的工作演示。
我有一个 ng-include
来包含部分内容。
在部分内部,我有一个带有ngModel
AND 指令的文本输入。
模型在包含内相应地更新,但包含外的任何交互都将被忽略。包含外部的 test
不会更新,但内部的 test
会更新。
该指令在调用时处理enter
键并调用正确的范围和函数。但是,$scope.test
变量从未更新,但 $scope.testFinal
已更新,ng-include
模板会适当地呈现它。尝试重置$scope.test
模型也不起作用。
我在这里遗漏了什么吗?或者这是指令或ng-include
的错误?
【问题讨论】:
见***.com/questions/11412410/… 【参考方案1】:ng-include
创建自己的作用域,它不同于外部作用域。在ng-include
模板中使用this.test
而不是$scope.test
。它会正常工作。
【讨论】:
【参考方案2】:不要使用原语来定义变量,而是让它成为一个对象。
$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
【讨论】:
很简单,我一直都知道,但一直不明白原因。谢谢你的文章。它绝对应该在他们的网站上获得更多的代表。 谢谢,你节省了我几个小时。 角度 wiki 链接不再有效。 这是唯一对我有用的解决方案。使用 this.varName 或 $parent.varName 什么都不做。谢谢!【参考方案3】:John Lindquist 对此有一个 video。虽然他没有完全解释为什么你需要使用一个对象。
基本上每次有一个新的非隔离作用域时,父作用域的每个属性都会复制到新作用域,正如@charlietfl 解释的那样,复制原始类型真的会创建一个“副本" 但是对于对象,您得到的是参考,因此更改是全局。
【讨论】:
以上是关于Angular - 在 ngInclude 中调用时 ngModel 不更新的主要内容,如果未能解决你的问题,请参考以下文章
如何在 AngularJS 中为 ngInclude 指令指定模型?