Javascript 在更改父范围时更新angularJs指令范围变量
我正在用angularJS创建一个指令,它将替换元素。我在父范围中有一个绑定到元素的变量 我想在更改父范围变量值时更新指令范围变量 元素如下所示Javascript 在更改父范围时更新angularJs指令范围变量,javascript,angularjs,mean,Javascript,Angularjs,Mean,我正在用angularJS创建一个指令,它将替换元素。我在父范围中有一个绑定到元素的变量 我想在更改父范围变量值时更新指令范围变量 元素如下所示 <my-element attr-xyz="scope_variable"></myelement> 但是,当我编写如下相同的代码时,它给出了未定义的值 return { scope: {attrXyz: '@'}, restrict: 'E', replace: true, link: fun
<my-element attr-xyz="scope_variable"></myelement>
但是,当我编写如下相同的代码时,它给出了未定义的值
return {
scope: {attrXyz: '@'},
restrict: 'E',
replace: true,
link: function(scope, element, attr, controller){
scope.$watch(attr.attrXyz, function(value){
console.log('value = '+value);
});
}
}
两种方法都有效。(指令1-2)
然而,如果你引入隔离范围-第二种方式不起作用。(指令3)
然后可以使用$observe(指令4)
或者您可以在范围中定义它并使用watch。我建议您只使用
如果在该值更改时确实需要在指令中触发函数/验证,则仅使用
$observe
和$watch
,否则您只是为此添加了侦听器,并且使用模板中的属性更易于维护 更好的方法是将link:function
替换为controller:function
我在范围中将其定义为作用域:{attrXyz:'@},并使用了watch,但它不起作用。我用attr.$observe('attrXyz',函数(值){}替换了它;现在它对我来说工作正常了。添加到具有作用域:{attrXyz:'@'}的plunk directive5和watchOkay,基本上只将attr.attrXyz更改为attrXyz。感谢日志。ng attr是否已弃用?我在文档中找不到它。在1.3.20版之后,它似乎被弃用了。是文档。该功能仍在运行,但angular 1.5中似乎不再需要读取。如果我错了,请纠正我
return {
scope: {attrXyz: '@'},
restrict: 'E',
replace: true,
link: function(scope, element, attr, controller){
scope.$watch(attr.attrXyz, function(value){
console.log('value = '+value);
});
}
}
attr.$observe('attrXyz', function(value){
console.log('4: '+ value);
});
<my-element ng-attr-xyz="scope_variable"></myelement>