2016-08-17 5 views
0

У меня есть директива, которая управляет Dom в функции ссылки. Внутри него еще одна директива о том, что мне нужна его функция связи, которая запускается после того, как родительская директива закончила манипуляцию с Dom. Например, я назначил свойства области действия родительской ссылки, но в дочерней директиве область не имеет этих свойств (области не изолированы, и мне нужно изменить область в функции ссылки, чтобы я мог получить доступ к элементу)Директива внутри функции директивной ссылки sync

ответ

1

Для директив порядок выполнения функции link (то же, что и post-link) отменен. Это означает, что для следующего сценария:
<span l1-dir><span l2-dir></span></span>
Вызывается функция связи дочерней директивы, а затем вызывается ссылка на родительскую директиву. Нам повезло, потому что у нас также есть функции pre-link, которые вызывается в порядке определения директивы.
В нашем случае вызывается функция первой директивы pre-link, а затем функция pre-link второй.
Вы можете переместить логику манипулирования DOM из родительской директивы в функции pre-link (первый разделить на pre и post):

return { 
     restrict: 'A', 
     compile: function compile(tElement, tAttrs, transclude) { 
      return { 
       pre: function preLink(scope, iElement, iAttrs, controller) { //parent directive logic for DOM manipulation 
       }, 
       post: //nothing 
      } 
     } 

Это гарантирует, что в post-link части ребенка директивы вашей манипуляции DOM от родительского директива будет полной.

+0

Это работает для меня. Спасибо. –

0

Просто добавьте нг-если к вашей директиве ребенка и установить его на истинный после завершения в $ таймаута в 0 в вашей директиве «родительским», как это:

/*above should be placed all your parent directive link function code... the $timeout should be 
executed after your parent directive code*/ 
$timeout(function(){ 
    showChildDirective = "true"; 
}, 0); 

Таким образом, вы выполним всю вашу задачу с вашей родительской директивой ($ timeout будет помещен в нижней части функции ссылки), и вы сможете дождаться завершения следующего цикла $ digest, , поэтому все ваши привязки к DOM будут быть comp Lete.

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