指令回调函数不从$ watch内部触发

时间:2016-01-05 14:23:28

标签: javascript angularjs angularjs-directive

我创建了一个angular指令,它接收一个回调函数作为属性。

<my-dir ng-model="foo.bar" on-change="func(data)"></my-dir>

在指令的定义中,我将此属性分配如下

scope: {onChange: '&onChange'}

现在,在我的链接功能中,如果我调用 scope.onChange({data:23}); 一切正常。但是如果我在$ watch函数中进行同样的调用,它就会失败。

scope.$watch("stepId", function(newValue, oldValue) {
    scope.onChange({data: 23}); //why it does NOT work ????
})

2 个答案:

答案 0 :(得分:1)

也许不是看“stepId”,而应该看一个函数返回值。

    scope.$watch( function(){ return scope.stepId; }, function( newValue, oldValue){
        if( typeof newValue == 'undefined' )
            return;

        scope.onChange( {data: scope.stepId});
    });

你应该更好地制作一个jsfiddle。

答案 1 :(得分:0)

在app或指令的范围内声明stepId,否则$ watch将不会监听你的变量