Angular Директива attrs. $наблюдать

Я нашел эту директиву Angular онлайн, чтобы добавить кнопку щебета. Все это кажется звездным, но я не могу понять, что делает 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>

Ответ 1

Короче:

Каждый раз "shareTwitterUrl" или "shareTwitterText" изменяется, он вызывает функцию общего доступа.

Из другого ответа stackoverflow: (fooobar.com/questions/18387/...)

$observ() - это метод объекта Attributes, и как таковой он может только для наблюдения/просмотра изменения стоимости атрибута DOM. Это используется только внутри внутренних директив. Используйте $observ, когда вам нужно наблюдать/смотреть атрибут DOM, который содержит интерполяцию (т.е. {{}} 'Ы). Например, attr1 = "Name: {{name}}", а затем в директиве: attrs. $наблюдать ('attr1',...). (Если вы попробуете область действия. $Watch (attrs.attr1,...) это не сработает из-за {{}} s - вы получите undefined.) Использование $смотреть за всем остальным.

Из Angular docs: (http://docs.angularjs.org/api/ng/type/$compile.directive.Attributes)

$compile.directive.Attributes # $наблюдать (ключ, fn);

Наблюдает интерполированный атрибут.

Функция наблюдателя будет вызываться один раз во время следующего $digest fol lowing сборник. Затем наблюдатель вызывается всякий раз, когда изменяется интерполированное значение.

Ответ 2

<input type="text" ng-model="value" >
<p sr = "_{{value}}_">sr </p>


.directive('sr',function(){

return {

        link: function(element, $scope, attrs){
                attrs.$observe('sr', function() {
                                console.log('change observe')
                    });
            }
    };
})