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

Is 'IsolateScope' in Angularjs using $watch by default?

我不明白为什么或为什么不 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???
           });
        }
    };
});

独立作用域和$watch不一样。使用像

这样的隔离范围
scope: {
    myAttr: '='
}

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

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

如果你HTML这样

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

发生以下情况:指令中的 scope.readonly 获取 question.readonly 的值(来自隔离范围之外)。每当 question.readonly 的值发生变化时,scope.readonly 的值也会随之变化。您无需为此做任何事情。

但是,如果您想在 scope.readonly 发生变化时额外执行一些操作,例如在不再只读时更改元素的颜色,则您需要自己的观察者 (scope.$watch)。