Hören Sie Fensterereignisse in einem Angularjs-Dienst ab

8

Ich möchte die Fensterereignisse in meinem AngularJS-Dienst anhören, damit ich sie an meine Controller senden kann.

Ich habe eine Chrome-Erweiterung, die jede Nachricht mit port.postMessage('Any Message'); versendet.

Ich möchte, dass mein angularjs-Dienst diese Nachricht hört und sie mit $rootScope.$broadcast("Something occurred.");

an den Controller sendet

In meinem Dienst versuche ich dies mit dem folgenden Listener.

%Vor%

Ich habe auch $window ausprobiert, aber ich weiß nicht, warum der obige Code nicht funktioniert. Auch meine IDE, jetbrains webstorms klassifizieren obigen Codeausschnitt als nicht erreichbar.

Vorher habe ich den obigen Code in einem Controller verwendet und es hat gut funktioniert. Ich habe nicht im Controller gesendet. Nun möchte ich das zum Dienst verschieben, damit alle Controller es vom Dienst hören können.

    
Sojharo Mangi 07.02.2015, 13:51
quelle

4 Antworten

9

Hier ist ein Arbeitsbeispiel, das ich gemacht habe - mit dem Abonnement eines DOM-Ereignisses und der Übertragung des Ereignisses vom Dienst an den Controller: Ссылка

%Vor%     
shershen 07.02.2015, 14:42
quelle
4

So etwas könnte helfen:

%Vor%     
Rian 18.07.2015 14:56
quelle
0

Haben Sie diesen Dienst irgendwo injiziert? Dienste werden nur ausgeführt, wenn Sie sie wirklich injizieren.

Außerdem ist es besser, $ window anstelle von window zu verwenden, damit Sie es später in Ihren Tests sehen können.

    
AdirAmsalem 07.02.2015 14:28
quelle
0

Problem :

%Vor%

Beispiel :

Stellen Sie sich vor, wir haben einen Listener-Code in Seite B geschrieben. Meine Startseite ist Seite A .

Ich habe eine Warnung im Listener-Code in Seite B hinzugefügt.

%Vor%

Lasst uns gehen,

  • Seite A & gt; & gt; Seite B (Alarmzählung 1) Seite B & gt; & gt; Seite A & gt; & gt; Seite B (Warnung Zählung 2) Seite B & gt; & gt; Seite A & gt; & gt; Seite B (Warnungszahl 3)
vishnu das 27.02.2017 06:40
quelle

Tags und Links