У меня есть директива, которая использует другую директиву:
<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
родительского?
Вместо функции установите link
на объект, содержащий функцию post
.
link: { post: function() { } }
Как сказал Sidharth & Arlen, вы можете установить приоритет или обычным образом, если не обязательно иметь эту область действия: {} в коде, чем вы можете сделать это довольно легко, используя двустороннюю привязку данных в директивах. https://docs.angularjs.org/guide/directive.
Вы можете попробовать несколько вещей:
Опорожните функцию связи внешней директивы после таймаута следующим образом:
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) {