Поскольку вы используете 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')
Вы можете, но зачем он вам нужен? Вы понимаете, что это плохая практика? – dfsq
Я не знаю angular.js (читаю вопросы здесь, чтобы узнать это), но я знаю другие реализации MVVM в браузере, и доступ к подобному элементу создает плотную связь между вашим представлением и презентацией или бизнес-логикой. Вероятно, вам следует рассмотреть возможность передачи этого значения через двустороннюю привязку через модель представления или службу –
, это очень упрощенный вариант моей задачи, и там у меня есть templateUrl, и мне нужно получить такой элемент. – Andrey