2012-09-19 89 views
1

我正在嘗試一個場景,我登錄,並在成功時想要存儲該LoginID並將其傳遞給所有其他控制器以進行導航/用戶管理。與設置的全局變量類似,存儲一次使用無處不在的概念。AngularJS - 跨控制器廣播

一直使用angularjs共享服務技術,但它並沒有在其他控制器中挑選bradcaster LoginID。

高層次的細節:

1)登錄HTML從我來自哪裏登錄HTML打回電話詢問用戶認證 2)在成功結束服務器,通過共享服務 3廣播登錄ID)調用登錄器,網頁瀏覽到OrderMenu Html並調用OrderMenu控制器,試圖獲取通過共享服務廣播的用戶標識。 4)但在Order Menu控制器中,顯示的UserID是初始化值,即看起來像app.factory被再次調用並初始化廣播值。

我想停止重新加載app.factory。看起來像在這裏失去了一些東西。任何想法在這裏都會很有幫助。

+0

你可以提供一個jsFiddle(http://pkozlowskios.wordpress.com/2012/08/12/using-jsfiddle-with-angularjs/),只顯示userID問題,或者至少是服務代碼以及控制器與服務交互? –

回答

1

這是您描述的一個快速實施示例。 它似乎工作。

http://plnkr.co/edit/SPAB4W

我的服務被定義爲如下:

app.factory('UserAuth', function() { 
    return { 
    userId: 'unknown', 
    authenticate: function(name) { 
     // do server side authentication here... 
     this.userId = 'authenticatedUserId_Of_' + name; 
    } 
    }; 
}); 

在這個例子中,當第二控制器(OrderCtrl)獲取調用, UserAuth.userId沒有得到重新初始化 ,並保持所得到的userId認證的內容。

您可能想分享您的代碼。

+0

謝謝@tosh shimayama,馬克對你的評論。我的問題是初始化+加載控制器本身。非常感謝塔克爾托克。 – Aki

+1

@Aki我很想聽聽你如何解決你的問題,因爲我目前面臨類似的問題。你能提供代碼嗎? – abstractpaper