$ emitt oder $ Broadcast-Ereignisse aus dem Dienst und hören sie in einem Controller (oder mehrere) an
-
21-12-2019 - |
Frage
Ich habe ein einfaches Beispiel codiert, in dem ich ein Ereignis aus einem Dienst ausgeben / ausstrahlen möchte, und ich möchte, dass das Ereignis von einem Controller gehört und die Benutzeroberfläche wechselt, aber ich kann es nicht arbeiten und den Code debuggenscheint im Zuhörer zu stoppen, aber es leitet die Funktion nicht aus.
http://plnkr.co/edit/eglcq7zellfkp86dyzoe?p=Preview
service:
generasacodicetagpre.controller
generasacodicetagpre.index
generasacodicetagpre. Lösung:
Wie Ivarni oder Walter-Marke berichtet, der Anruf an die Dienstfunktion, die das Ereignis auslöst, muss nach dem Zuhörer platziert werden, wenn nicht, wenn Sie nicht ein Ereignis auslösen, das keinen Zuhörer aufweist, der noch nicht zuhören kann.
.Wir müssen nur den Controller wie folgt ändern:
service
generasacodicetagpre.Lösung
Sie löst das Ereignis aus, bevor Sie den Hörer angehängt haben.
Versuchen Sie das:
generasacodicetagpre.Andere Tipps
Platzieren Sie einfach den serviceTest.test () unter Ihrem Hörer in Ihrem Controller, wie folgt:
generasacodicetagpre.Sie legen den Hörer an, direkt nach dem Aufruf von Test (), und dort ist es nur das Ereignis verfehlt.
Die Lösung, mit der ich in einer mittelgroßen App am besten funktioniert, besteht darin, einen Wrapper um die $ EMIT-Funktion zu erstellen und den $ EMIT mit einigen Millisekunden zu verzögern, nur für alle Ereignisse, die registriert werden sollen.
.Sie können auch einige weitere Leckereien in den Wrapper einführen, wie Sie es Ihren aktuellen $ SCOPE angeben, oder lassen Sie es einen neuen untergeordneten Geltungsbereich des $ ROOTSCope (der nur eine Ebene darunter sein wird, die sich nur dann schnell ansiehtBis zu $ Rootscope), und verwenden Sie, dass als Datenkanal, Ereigniszerstörung nach dem Geltungsbereich stirbt, usw.
Hier ist der gesamte Quellcode: http://jsfiddle.net/gabrielcatalin/2urr7
.und hier ist ein Auszug:
generasacodicetagpre.