2015-02-06 39 views
0

我有一個相當簡單的角度應用程序(工作在MEAN堆棧),不使用ui路由器(我想現在保持這種狀態)。角度:跨控制器共享登錄狀態

我在想什麼跨應用共享用戶「登錄」狀態的最佳方式是。

舉例來說,我想一個指令,以顯示「註冊或登錄」如果用戶沒有登錄,或者「你好,用戶名」,如果用戶登錄。

在我的應用程序,許多指令請參閱登錄狀態,因此似乎使用多個控制器並在每個控制器上聲明登錄$scope屬性並不是最好的主意。我怎麼能做到這一點?

作爲後續,關於如何知道用戶是否登錄的最佳方式的任何建議?現在我正在基於存儲在本地存儲中的auth-token,但它也可能是cookie。

我想知道一種最佳實踐方式,我可以存儲的不僅僅是用戶的登錄狀態,還包括他們的信息(名稱,項目摘取等),並保持同步到我的服務器(如果他們登錄另一臺電腦,他們的購物車將持續)。

感謝

+0

分享整個登錄的布爾控制器與工廠。工廠數據在控制器之間共享的簡單示例http://stackoverflow.com/a/21924873/1803298 – cheekybastard 2015-02-06 02:32:30

回答

0

寫服務:

angular.module('myApp') 
.service('Auth', function() { 
    var loggedInState = {}; // log in state data 

    var logIn = function() { 
     // send log in request 
    } 

    return { 
     state: loggedInState, 
     logIn: logIn 
    } 
}) 

現在你到處注入這個服務,你想知道,如果他們登錄,並檢查狀態

+0

好吧,那麼如果我想有條件地顯示或隱藏某個指令中的某些內容,那麼這個注入,我該怎麼做。換句話說,如何訪問這個'Auth'服務的屬性,並在注入後將它們設置爲'$ scope'在指令中? – Startec 2015-02-06 02:53:23

+1

在控制器中注入服務,並將您需要的服務從服務分配到控制器範圍,或者如果您願意,可將整個服務分配給控制器。 – 2015-02-06 02:54:27

+0

明白了。我明白了,將控制器注入指令的'controller'屬性。 – Startec 2015-02-06 02:58:18