Привязка AngularJS не работает при изменении атрибута

Я создал директиву с изолированной областью действия:

.directive('title',function(){
    return {
        restrict:'E',
        scope:{
            text:'@'
        },
        replace:true,
        template:'<div>{{text}}</div>',
        link:function(scope,iElement,iAttrs){
        }
    };
})

Когда я пытаюсь изменить атрибут "text" методом .attr, привязка не работает. Я пытался использовать метод $apply, но безуспешно.

Что случилось?

JSFiddle

PS: Пожалуйста, не предлагайте какое-либо решение с использованием контроллера и привязкой атрибута text к свойствам $scope (что-то вроде <title text="{{somepropertyincontrollersscope}}">...). Моя проблема только связана с изменением атрибута внешне.


person Engineer    schedule 03.04.2014    source источник


Ответы (1)


Я думаю, вам придется сделать это в функции link, наблюдая за значением атрибута:

scope.$watch(function () {
    return iElement.attr("text");
}, function (newVal) {
    scope.text = newVal;
});

Вот обновленная скрипта.

person James Allardice    schedule 03.04.2014