角度指令 attrs.$observe

2023-11-21

我在网上找到了这个 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(使用前将#替换为@)

角度指令 attrs.$observe 的相关文章

随机推荐