2016-06-01 7 views
0

Szenario: Ich habe eine AngularJS App, die Googles Auth. Verwendet.Wie wird ein AngularJS-Ereignis aus einem Popup ausgegeben?

Abhängig von der Ressource, wenn Angular (mein) Backend aufruft, kann es eine Antwort zurückgeben, die nach einem Oauth-Token fragt. In diesem Fall zeigt Angular mit dieser Weiterleitungs-URL ein Popup-Fenster (nicht das modale Dialogfeld des Bootstrap) an.

Google wird authentifiziert, um Erlaubnis gefragt und sendet den Benutzer an mich zurück. Es gibt eine Rückruf-URL, die den 'Code' verarbeitet und das echte Token abruft. Diese callbak URL wird in diesem Popup aufgerufen.

Wenn ich das Token zu erhalten, soll das Fenster selbst schließen, und benachrichtigt Angular die letzte Anfrage erneut versuchen (jetzt habe ich das Token in der Sitzung des Benutzers)

Problem: Wie kann ein Popup emittiert eine Angular Veranstaltung?

Eigentlich muss es nicht $rootScope.$emit sein, aber nur eine Möglichkeit, Angular zu benachrichtigen.

Ich sah this option, aber es scheint nicht gut für Angular :(

Antwort

0

Sie local Ereignisse verwenden können, um diese Demo einen Blick darauf werfen. http://html5demos.com/storage-events

// this should be in the main page 
$window.addEventListener('storage', function(event) { 
    if(event.key === 'login-notification') { 
    // got it! 
    // you can get the value from 
    // the notification with "event.newValue" 
    } 
}, false); 

// send the event with just a setItem from the popup 
$window.localStorage.setItem('login-notification', 'ayy'); 
0

zuerst einen Dienst erstellen

Jetzt im Popup können Sie den Token im Service einstellen, jetzt haben Sie den Wert verfügbar durch die App. Sie können auch den speziellen Schlüssel in der serv Eis und etwas Aktion, wenn der Wert eingestellt ist.

+0

Sind Sie sicher? Der Angular-Dienst wird * Singleton * zwischen zwei Browserfenstern fortsetzen? – Falci

+0

Oh, so muss es Singleton zwischen Windows sein, die in der Frage nicht klar war.Verwenden Sie das [ng-Speicher] (https://github.com/gsklee/ngStorage) Modul, verwenden Sie die 'set' Methode zu setzen es zu speichern und die "Get" -Methode, um es wiederzuerlangen –