Da Sie templateURL verwenden, muss der HTML-Code "heruntergeladen" werden und es ist ein asynchrones Ereignis, das einige Zeit in Anspruch nimmt.
Sie könnten das mit einem Timeout umgehen, aber das wäre nicht sauber, da Sie nicht wissen, wie lange Sie warten müssen.
Eine Option, wenn <second>
immer soll innerhalb <first>
, sein, ist ein Rückruf aus, um sie auszuführen, sobald es fertig ist, von seinem eigenen Link-Funktion:
{
restrict: "E",
templateUrl:'second.html',
link: function(scope) {
scope.onSecondReady();
}
}
prüfen diese plunkr für die volle Code:
http://plnkr.co/edit/NLdWaL8zRYkroGC7ZkYL?p=preview
Nun, wenn <second>
sollte wiederverwendbar in anderem Kontext werden und nicht immer innerhalb der Tannen t eins, dann müssen Sie Ereignisse verwenden. Sobald die Sekunde bereit ist, verwenden Sie scope.$emit('second-is-ready')
und von der ersten hören Sie es scope.$on('second-is-ready')
Sie können, aber warum brauchen Sie es? Sie erkennen, dass dies eine schlechte Praxis ist? – dfsq
Ich kenne angular.js nicht (lese Fragen hier, um es zu lernen), aber ich kenne andere MVVM-Implementierungen im Browser, und der Zugriff auf ein Element wie dieses erzeugt eine enge Kopplung zwischen Ihrer Sicht und der Präsentation oder Geschäftslogik. Sie sollten wahrscheinlich in Betracht ziehen, diesen Wert durch bidirektionale Bindung über das View-Modell oder einen Service zu kommunizieren –
es ist sehr vereinfachte Variante meiner Aufgabe, und ich habe TemplateUrl und ich muss Element wie folgt erhalten. – Andrey