Как ждать дочерней директивы рендера?

0

У меня есть директива, которая использует другую директиву:

<div style="border:2px solid black;height:150px;padding:10px">
     <my-internal-directive></my-internal-directive>
     <my-internal-directive></my-internal-directive>
     <my-internal-directive></my-internal-directive>
</div>

Внутренняя директива:

<h2>foo</h2>

Внутренний контроллер:

internalDirectiveModule.directive('myInternalDirective', function($document){
    return {
      restrict:'E',
      scope: {},
      //templateUrl: 'myInternalDirective.html',    // EXTERNAL directive render first
      template: '<h2>foo</h2>',                     // INTERNAL directive render first
      link: function(scope, element){
        $document.find('body').append('<h1>internal directive\n');
      }  
    };
});

Проблема в том, что я использую templateUrl для внутренней директивы, которую создает внешняя, но когда я использую template - сначала создается внутренняя директива. Мне нужно получить данные из внутренней директивы внутри внешнего после того, как внутренняя визуализация (метод link вызывается), но я не могу достичь такого поведения, потому что я предполагаю использовать только templateUrl. Как я могу получить данные из рендеринговой дочерней директивы внутри метода link родительского?

DEMO

Теги:
angularjs-directive

3 ответа

1

Вместо функции установите link на объект, содержащий функцию post.

link: { post: function() {  }  }

документация после связывания

0

Как сказал Sidharth & Arlen, вы можете установить приоритет или обычным образом, если не обязательно иметь эту область действия: {} в коде, чем вы можете сделать это довольно легко, используя двустороннюю привязку данных в директивах. https://docs.angularjs.org/guide/directive.

0

Вы можете попробовать несколько вещей:

  1. Установите приоритет внутренней директивы выше приоритета внешней директивы.
  2. Опорожните функцию связи внешней директивы после таймаута следующим образом:

    link: function() {$ timeout (linkFn, 1000, false); }

Обновлено: Здесь приведен пример установки приоритета:

    angular.module('abc').directive('xyz', directive);

    directive.$inject = ['$timeout'];

    function directive($timeout) {

            return {
                    restrict: 'A',
                    priority: 100,
                    link: function ($scope, $element) {
  • 0
    Хорошо. Спасибо за ответ, но как установить приоритет?
  • 0
    В определении директивы вы можете указать так: priority: 100
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню