2016-04-25 16 views
1

Wie kann ich Element mit der Klasse .second von second Direktive in link Funktion von first Richtlinie bekommen?Get Element von Kind-Richtlinie in Elternteil

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

P. S funktioniert es mit template in link Funktionen, aber ich brauche templateUrl.

+1

Sie können, aber warum brauchen Sie es? Sie erkennen, dass dies eine schlechte Praxis ist? – dfsq

+0

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 –

+0

es ist sehr vereinfachte Variante meiner Aufgabe, und ich habe TemplateUrl und ich muss Element wie folgt erhalten. – Andrey

Antwort

2

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')

+0

Vielen Dank – Andrey