Angularjs中的'IsolateScope'默认使用$ watch吗?

时间:2015-02-23 14:24:28

标签: angularjs angularjs-directive isolate-scope

我不明白为什么或为什么不使用angularjs范围使用或不使用$ watch?

例如:

app.directive('fooDirective', function () {
    return {
        scope: {
            readonly: '=' or '@' or '&'
        },
        link: function (scope, element, attrs) {
           // should I use $watch here or not ?
           scope.$watch('readonly', function () {
               // do I require to do so???
           });
        }
    };
});

2 个答案:

答案 0 :(得分:0)

隔离范围和$watch不一样。使用像

这样的孤立范围
scope: {
    myAttr: '='
}

告诉$compile绑定到my-attr=""属性。这意味着如果您更改指令中的值,它也会在父作用域中更新。

另一方面,如果该值发生变化,使用$watch会触发一个函数。

答案 1 :(得分:0)

如果你有像这样的HTML

<div foo-directive readonly="question.readonly">

发生以下情况:指令中的scope.readonly获取question.readonly的值(来自隔离范围之外)。每当question.readonly的值发生变化时,scope.readonly的值都会相应更改。你无事可做。

但是如果你想在scope.readonly更改时另外做一些事情,比如当元素不再是只读时更改元素的颜色,那么你需要自己的观察者(scope.$watch )。