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')
});
}
};
})