2016-04-25 7 views
1

Как я могу получить элемент с классом .second от second директива в link функция first директива?Получить элемент из дочерней директивы в родительском

http://plnkr.co/edit/PiCyZzgvdwAuOyNKOi9E?p=preview

P.S он работает с template в link функций, но мне нужно templateUrl.

+1

Вы можете, но зачем он вам нужен? Вы понимаете, что это плохая практика? – dfsq

+0

Я не знаю angular.js (читаю вопросы здесь, чтобы узнать это), но я знаю другие реализации MVVM в браузере, и доступ к подобному элементу создает плотную связь между вашим представлением и презентацией или бизнес-логикой. Вероятно, вам следует рассмотреть возможность передачи этого значения через двустороннюю привязку через модель представления или службу –

+0

, это очень упрощенный вариант моей задачи, и там у меня есть templateUrl, и мне нужно получить такой элемент. – Andrey

ответ

2

Поскольку вы используете templateURL, HTML необходимо «загрузить», а затем это асинхронное событие, которое занимает некоторое время.

Вы можете обойти это с таймаутом, но это не будет чистым, поскольку вы не знаете, как долго ждать.

Один из вариантов, если <second> должен всегда находиться внутри <first>, чтобы запустить обратный вызов от него, как только он будет готов, со своей собственной функции связи:

{ 
    restrict: "E", 
    templateUrl:'second.html', 
    link: function(scope) { 
    scope.onSecondReady(); 
    } 
} 

Проверить это plunkr для полного код:

http://plnkr.co/edit/NLdWaL8zRYkroGC7ZkYL?p=preview

Теперь, если <second> предполагается повторно использовать в другом контексте, и не всегда в елях t one, то вам нужно использовать события. Один раз в секунду вы используете scope.$emit('second-is-ready') и с первого из них вы слушаете его scope.$on('second-is-ready')

+0

Спасибо большое) – Andrey

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