Область AngularJS не обновляется в директиве

У меня есть директива AngularJS, для которой требуется изолированная область плюс доступ к области $parent. Родительская область имеет данные, которые изменяются после завершения вызова ajax.

В функции связывания моей директивы у меня есть:

scope.loading = scope.$parent.contractData.People.loading;

но когда родительское значение contractData изменяется, scope.loading не обновляется. Я даже пытался использовать scope.$watch, но это тоже не уведомляет об изменении.

В шаблоне моей директивы я использую ng-show. Следующий шаблон работает так, как ожидалось:

<span ng-show="$parent.contractData.People.loading">loading</span>

Но это не работает (потому что скоуп никогда не узнает об изменении данных):

<span ng-show="loading">loading</span>

Мне нужно иметь возможность настроить переменную области действия в моей директиве, потому что «Люди» будут меняться в зависимости от данных, переданных в атрибуты директивы. В противном случае я бы просто придерживался рабочего примера выше.

Любая помощь приветствуется. Спасибо.


person Brett    schedule 08.06.2013    source источник


Ответы (1)


Вы можете настроить HTML для директивы, например:

<div mydirective="contractData.People.loading"></div>

И внутри самой директивы создайте привязку изолированной области к свойству loading

scope: {
    isLoading: '=mydirective'
},
// rest of directive

Это создает свойство в локальной области действия директивы, связанное с выражением атрибута. Затем вы можете ссылаться на это свойство области действия в шаблоне директивы, например:

template: '<span ng-show="isLoading">loading</span>'

Вот скрипка

person Dan    schedule 08.06.2013