Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在更改父范围时更新angularJs指令范围变量_Javascript_Angularjs_Mean - Fatal编程技术网

Javascript 在更改父范围时更新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

我正在用angularJS创建一个指令,它将替换元素。我在父范围中有一个绑定到元素的变量

我想在更改父范围变量值时更新指令范围变量

元素如下所示

<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>