2016-06-01 28 views
0

情景:我有一個使用Google身份驗證的AngularJS應用程序。如何從彈出框中發出AngularJS事件?

取決於資源,當Angular調用(my)後端時,它可以返回一個請求Oauth令牌的響應。 在這種情況下,Angular將顯示一個彈出窗口(不是引導程序的模式對話框)與該重定向URL。

Google會進行身份驗證,請求許可,並將用戶發回給我。 有一個回調URL會處理'代碼'並獲得真實的令牌。此callbak網址將在該彈出窗口內被調用。

當我拿到令牌時,彈出窗口應自行關閉,並通知角再次嘗試,最後一個請求(現在我已經在用戶的會話令牌)

問題:如何才能彈出發出角事件?

實際上,它不需要是$rootScope.$emit,而只是一種通知Angular的方法。

我看到this option,但它似乎沒有好角:(

回答

0

可以使用localStorage的事件,來看看這個演示: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

首先創建一個服務

app.service("servicee", function(){ 
    return { 
    set : function(k,v){ 
      this[k] = v;  
    }, 
    get : function (k){ 
     return this[k] 
    } 
    } 
}); 

現在在彈出窗口中,您可以在服務中設置令牌,現在您可以通過應用程序獲取該值了,還可以$觀看服務器中的特定密鑰在設定值時採取一些行動。

+0

確定嗎? Angular服務將在兩個瀏覽器窗口之間繼續* singleton * – Falci

+0

哦,所以它必須是在問題中不明確的窗口之間的單例。使用[ng-storage](https://github.com/gsklee/ngStorage)模塊,使用'set'方法來設置它存儲和'get'方法來檢索它 –