作用域.$watch未被AngularJS指令调用
我在AngularJS指令中有以下作用域.$watch未被AngularJS指令调用,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我在AngularJS指令中有以下链接功能: link: function(scope, iElement, iAttrs) { scope.$watch('name', function(newVal){ if(newVal){ console.log(newVal); } }, true); } 全小提琴位于此处: 我正在试图弄清楚,当用户更改textarea中的名
链接
功能:
link: function(scope, iElement, iAttrs) {
scope.$watch('name', function(newVal){
if(newVal){
console.log(newVal);
}
}, true);
}
全小提琴位于此处:
我正在试图弄清楚,当用户更改textarea中的
名称变量时,为什么不调用$watch
函数。当您在指令中写入此变量时,您正在创建一个新的作用域
scope: {
name: '='
}
只要去掉它,一切都会好起来的
解释
关于scope属性,在中,我们读到:
如果设置为{}(对象哈希),则创建一个新的“隔离”范围。“隔离”作用域与普通作用域的不同之处在于它不典型地从父作用域继承。这在创建可重用组件时非常有用,这些组件不应意外读取或修改父范围中的数据
=或=attr-设置本地作用域属性和名称的父作用域属性之间的双向绑定,该属性通过attr属性的值定义。如果未指定属性名,则假定属性名与本地名相同
请注意,对于双向数据绑定,希望您将模型作为属性传递
当你这样做时(把你的模型写成一个属性),它就像一个符咒(检查)
但是您正在通过ng model
传递属性。它已经在指令的范围内可用。创建新作用域时,实际上是在控制器作用域中创建一个子作用域,并将其设置为链接函数中的作用域
参数。事实上,如果您观看$scope.$parent.name
,它也会工作(检查)。我确实工作。你能简要解释一下指令链接函数中发生了什么,以及新作用域有什么问题吗?我的意思是:为什么链接函数没有使用我的新作用域?新作用域在链接函数中使用,但当指令使用隔离作用域时,它不再绑定到您在控制器中使用的范围之外的方向。嗯。。。我认为有一个与=
操作符的双向绑定…@balteo
-坏主意<代码>
-好主意