我在网上找到了这个Angular Directive,以添加一个Twitter分享按钮。一切似乎都是朝前走,但我无法弄清楚它们的attrs.$observe
实际作用。
我已经查看过文档,但$observe
在任何地方都看不到引用。
该指令似乎只是添加了href
来自控制器的指令,因此任何人都可以解释其余代码在做什么吗?
module.directive('shareTwitter', ['$window', function($window) {
return {
restrict: 'A',
link: function($scope, element, attrs) {
$scope.share = function() {
var href = 'https://twitter.com/share';
$scope.url = attrs.shareUrl || $window.location.href;
$scope.text = attrs.shareText || false;
href += '?url=' + encodeURIComponent($scope.url);
if($scope.text) {
href += '&text=' + encodeURIComponent($scope.text);
}
element.attr('href', href);
}
$scope.share();
attrs.$observe('shareUrl', function() {
$scope.share();
});
attrs.$observe('shareText', function() {
$scope.share();
});
}
}
}]);
<a href="" target="_blank" share-twitter share-url="[[shareTwitterUrl]]" share-text="[[shareTwitterText]]">Twitter</a>
简而言之:
每当“ shareTwitterUrl”或“ shareTwitterText”更改时,它将调用共享功能。
从另一个stackoverflow答案:(https://stackoverflow.com/a/14907826/2874153)
$ observe()是Attributes对象上的一种方法,因此,它只能用于观察/监视DOM属性的值更改。仅用于/调用内部指令。当需要观察/观察包含插值的DOM属性(即{{}})时,请使用$ observe。例如,attr1 =“ Name:{{name}}”,然后在伪指令中:attrs。$ observe('attr1',...)。(如果尝试使用scope。$ watch(attrs.attr1,...),则由于{{}}而无法正常工作-您将无法定义。)将$ watch用于其他所有内容。
从Angular文档中:(http://docs.angularjs.org/api/ng/type/$compile.directive.Attributes)
$ compile.directive.Attributes#$ observe(key,fn);
观察插值属性。
在下一次$ digest之后的编译过程中,观察者函数将被调用一次。每当插值更改时,便调用观察者。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句