Angular-styleguide: $emit, $broadcast oder $on in eine Fabrik verschieben?

Erstellt am 12. Mai 2015  ·  8Kommentare  ·  Quelle: johnpapa/angular-styleguide

John, in Y031 erwähnst du folgendes:

Wenn Sie beispielsweise Ereignisse mit $emit, $broadcast oder $on veröffentlichen und abonnieren, sollten Sie diese Verwendungen in eine Factory verschieben und vom Controller aus aufrufen.

Könnten Sie die Implementierung ein wenig erläutern? Ein Codebeispiel wäre schön!

question

Alle 8 Kommentare

Ich habe mich das auch gefragt und die folgende StackOverflow-Frage/Antwort gefunden: http://stackoverflow.com/questions/14056874/how-to-emit-events-from-a-factory

Ich bin ein ziemlicher Anfänger, was Winkel angeht, also wenn dies eine schlechte Übung ist, sagt es mir bitte jemand. :)

Ich denke, es hängt auch davon ab, ob Sie sich in einem reinen Angular-Projekt oder einem Legacy-/Hybrid-Projekt befinden.
dh Sie möchten dasselbe Ereignis innerhalb und außerhalb des Angular-Frameworks teilen
Wenn Sie den Pub/Sub in eine Fabrik verwandeln, können Sie $emit, $broadcast durch alternative Implementierungen leichter ersetzen.
zB http://jonathancreamer.com/an-angular-event-bus-with-postal-js/

Ich habe auch Probleme, den folgenden Satz aus Y031 zu verstehen:

Ziehen Sie die Verwendung von $scope in einem Controller nur bei Bedarf in Betracht. Wenn Sie beispielsweise Ereignisse mit $emit, $broadcast oder $on veröffentlichen und abonnieren, sollten Sie diese Verwendungen in eine Factory verschieben und vom Controller aus aufrufen.

Die Schlussfolgerung des obigen Satzes ist also, Sendungen mit dem Einsatz von Fabriken überhaupt zu vermeiden? Wenn ja, würde ich eine andere Formulierung vorschlagen.

Ich denke nicht an die Kommunikation zwischen Controllern, sondern an größere Zustandsänderungen wie Login / Logout. Da muss ich möglicherweise so ziemlich alle Komponenten darüber informieren, wenn es sich für eine Sendung nach einer richtigen Aufgabe anfühlt?

Wenn ich das richtig verstehe, verstehst du das @sebastianhaas falsch. Diese Passage im Styleguide schlägt vor, die Verwendung von $emit , $broadcast oder $on in eine Fabrik zu verlegen und nicht die Verwendung _durch_ eine Fabrik zu ersetzen.

Danke für deine Antwort @zachlysobey! Ja, aber wie würden Sie das erreichen? Nehmen wir an, ich möchte Werte in einem Controller bei bestimmten Sendungen aktualisieren. Wenn ich diese $on 's in eine Fabrik bringe, frage ich mich, wie ich den Controller wieder informieren kann.

Lassen Sie mich das klarstellen ... Ich hatte einen verwirrenden Satz drin. Der Punkt war, $scope nur bei Bedarf zu verwenden. Das ist, wenn Sie einen Umfang haben müssen, um den Job zu bewältigen. Dazu gehört das Senden oder Emittieren. Diese sind im Controller nur dann in Ordnung, wenn Sie eine Nachricht senden müssen. Vielleicht möchten Sie aber auch andere Optionen in Betracht ziehen.

Ich habe versucht, hier vorsichtig zu sein, weil ich Scope.Apply auch in Controllern entmutigen möchte.

Ich habe den Satz entfernt.

Vielen Dank!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen