2017-02-23 222 views
2

У меня есть две директивы, что один из них вещать сообщение, чтобы получить еще один такой: (demo)

angular.module('app', []); 
angular.module('app').directive('foo', 
    function($rootScope) { 
     return { 
     restrict: 'EAC', 
     link: function($scope, element, attrs, controller) { 
      $rootScope.$on("onStart", function(e,d){ 
       alert(d.message) 
      }); 
     } 
     }; 
    } 
); 
angular.module('app').directive('bar', 
    function($rootScope) { 
     return { 
     restrict: 'EAC',  
     link: function($scope, element, attrs, controller) { 
        $rootScope.$broadcast("onStart", {message: "start"}); 
     } 
     }; 
    } 
); 

This Gieves сообщение.

Но мне нужен шаблон шаблона моей директивы и установить его так (demo).

angular.module('app').directive('foo', 
    function($rootScope) { 
     return { 
     restrict: 'EAC', 
     templateUrl: "tpl.html", 
     link: function($scope, element, attrs, controller) { 
      $rootScope.$on("onStart", function(e,d){ 
       alert(d.message) 
      }); 
     } 
     }; 
    } 
); 

Но оно не заполняет предупреждение сейчас.

ответ

0

Для выполняемой функции link Угловой нужен шаблон. Но шаблон теперь загружается из html-файла асинхронно. Следовательно, ваше сообщение транслируется до того, как функция ссылки в первой директиве даже выполняется и, таким образом, до того, как будет создан слушатель в корневом каталоге.

+0

есть ли решение этой проблемы? – barteloma

+0

Это кажется неправильным для меня, но вы можете просто разместить регистрацию своего слушателя 'onStart' перед оператором return директивы' foo'. Он работает, но очень взломан, и он не дает вам доступа ко всем параметрам, которые угловые передают функции 'link'. – gerrit

0

Решение может использовать template вместо templateUrl

template: "<div>Content of the template.</div>" 

EXAMPLE

+0

, но шаблоны имеют очень длинный контент. директивный контроллер работает до функции ссылки. но он не заполняется так же хорошо. – barteloma