阅读了ng-href/ng-src
的{{3}}和AngularJS : Difference between the $observe and $watch methods:
link: function(scope, element, attr) {
attr.$observe(normalized, function(value) {
if (!value)
return;
attr.$set(attrName, value);
// ...
}
}
我想知道为什么使用ng-href/ng-src
代替attr.$observe
来实现scope.$watch
。使用scope.$watch
,它看起来像
link: function(scope, element, attr) {
scope.$watch(attr[normalized], function(newValue) {
// ...
})
}
然后在视图中我们可以写<img ng-href="expressionFoo">
而不是<img ng-href="{{ expressionFoo }}">
。
我可以理解的可能原因是
attr.$observe
使指令更像普通的DOM属性。在链接之后,我可以通过attr.$set('ngHref', ...)
在另一个指令中影响该指令。ng-href
和ng-src
都会产生字符串属性,因此在此使用插值安全且更容易attr.$observe
。有什么想法吗?
答案 0 :(得分:1)
我认为范围不是您的想法。
默认情况下,指令中的选项scope
为false
,这意味着我们可以获得父范围,这可能是真的。
如果我们想要关注element's attribute change
,我们必须关注element's attribute "ng-blah"
。范围根本没有关系。
如果我们使用scope.watch
,我们可能甚至没有一个以该属性命名的属性,并且没有任何方法可行。