2015-12-22 2 views
0

У меня есть проблема на данный момент с директивой, тогда как некоторые значения области, заданные в родительском контроллере, не установлены, когда директива пыталась получить к ним доступ. Это связано с тем, что директива вызывается до того, как вызов AJAX вернул любые данные. Есть ли какая-нибудь возможность, чтобы моя директива дождалась, пока эти данные будут установлены до продолжения?Угловая директива, выполняемая до извлечения данных

angular.module('vt.directives', []) 
    .directive('personType', [function() { 
    return { 
     restrict: 'A', 
     replace: true, 
     scope: { 
      data: '=' 
     }, 
     template: '<div class="{{data.property}}"</div>', 
     link: function (scope, elm, attrs) { 
      console.log(scope.personType); 

     } 
    }; 
}]); 

<div ng-controller="parentcontroller"> 
    <div personType data="jsonobject"></div> 
</div> 

здесь мой parentcontroller в получении данных от службы и переходя к persontype директивы, но директива persontype не ждет до тех пор пока JSONObject является извлечением из службы, так что это вызывает много вопросов.

+2

Какое вред, если он не ждет? – Rayon

+2

Я думаю, что данные доступны в '' scope.data'' не в '' scope.personType'' в вашей директивной ссылке. –

+1

Когда вы выполняете 'scope: {data: '='}' в директиве, вы настраиваете двухстороннюю привязку, так как первый комментарий говорит, что нет никакого вреда, если она не ждет, b/c привязка должен снова обновляться при получении данных. Ваш оператор console.log будет работать только один раз (он не будет печатать ответ сервера, даже если вы использовали имя правой переменной). Вы показываете нам весь шаблон, в котором используется директива? Если есть больше, вы можете создавать дочерние области, которые могут вызвать такую ​​проблему. –

ответ

0

Если вы хотите, чтобы ваши данные в объеме, personType, то вы должны назначить данные самой personType директивы

<div personType="jsonobject"></div> 

и доступ к нему по

console.log($parse(attrs.personType)(scope)); 

И если вы хотите загрузить эти данные после того, как AJAX, тогда вы можете $ испускать свои данные из своей службы и получать доступ к ней в своей директиве методом $ on.

Может быть, это поможет в вашем случае :)

Смежные вопросы