作用域.$watch未被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中的名

我在AngularJS指令中有以下
链接
功能:

 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
-坏主意<代码>
-好主意