阅读AngularJS :$observe 和 $watch 方法之间的区别,以及实现:ng-href/ng-src
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', ...)
另一个指令影响指令。- interpolate 比表达式高。使用插值更容易编写纯字符串和多个表达式。
ng-href
并且ng-src
两者都会产生字符串属性,因此attr.$observe
在这里使用 interpolate 更安全且更容易。
任何想法?