我在网上找到了这个 Angular 指令来添加 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'改变时,它都会调用share函数。
来自另一个 stackoverflow 答案: (https://stackoverflow.com/a/14907826/2874153)
$observe() 是 Attributes 对象上的一个方法,因此,它可以
仅用于观察 DOM 属性的值变化。它
仅在指令内部使用/调用。需要时使用 $observe
观察/监视包含插值的 DOM 属性(即
{{}})。例如,attr1="Name: {{name}}",然后在指令中:
attrs.$observe('attr1', ...). (如果您尝试scope.$watch(attrs.attr1,
...)它不会工作,因为 {{}} s - 你会得到未定义的。)使用
$注意其他一切。
来自 Angular 文档: (http://docs.angularjs.org/api/ng/type/$compile.directive.Attributes)
$compile.directive.Attributes#$observe(key, fn);
观察插值属性。
观察者函数将在下一个 $digest 下面调用一次
低编译。每当内插值发生变化时,就会调用观察器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)