Вместо этого было бы лучше внести это изменение в директиву. Если по какой-либо причине это невозможно, то есть несколько вариантов.
Вне приложения получите ссылку на любой элемент DOM в приложении. Используя эту ссылку, вы можете затем получить ссылку на ее область. Вы можете использовать свой элемент с идентификатором d1
. Например:
var domElement = document.getElementById('d1');
var scope = angular.element(domElement).scope();
Вот несколько вариантов:
Опция 1
Измените модель вместо прямого изменения вида. В функции ссылки сохраните начальное значение атрибута в переменной области видимости, например:
scope.myvalue = attrs.attr1;
Затем вы можете изменить значение вне приложения (используя приведенную выше ссылку на область действия), например:
scope.$apply(function(){
scope.myvalue = 1000;
console.log('attribute changed');
});
Вот скрипка
Вариант 2
Если представление управляется непосредственно с помощью jQuery, я не знаю ни одного случая использования $observe
, $watch
или изолирующей области привязки к атрибуту, который будет работать, потому что все они привязываются к самому выражению атрибута только один раз, когда ссылка функция запускается впервые. Изменение значения приведет к сбою этих привязок. Таким образом, вам придется $watch
атрибут самого элемента DOM (а не через attrs
):
scope.$watch(function(){
return $(el).attr('attr1'); // Set a watch on the actual DOM value
}, function(newVal){
scope.message = newVal;
});
Затем вы можете изменить значение вне приложения (используя приведенную выше ссылку на область действия), например:
scope.$apply(function(){
$("#d1").attr("attr1",1000);
});
Вот скрипка
person
Dan
schedule
18.06.2013
Scope.$apply
может быть тем, что вам нужно. Однако более чем вероятно, что вы захотите передать свои данные коду Angular и позволить Angular управлять изменениями DOM, а не наоборот. - person Travis Watson   schedule 18.06.2013