2016-11-04 90 views
0

我有兩個角度js的控制器。與視圖同步本地存儲授權令牌狀態

  • NavCtrl控制導航欄,並顯示在需要註銷按鈕
  • AuthCtrl負責認證和設置本地存儲

,我現在面臨的問題是一切工作正常設置令牌並在兩個控制器中檢索相同的令牌。

但是,當我進行身份驗證時,我需要重新加載頁面以查看NavCtrl中的更改,因爲它在頁面呈現時取值。有什麼辦法可以將通知傳遞給NavCtrl:loginlogout請求相應地呈現更改?

.controller 'AuthCtrl',($scope,User)-> 
    $scope.login =()-> 
     User.auth $scope.username,$scope.password 
     return 
    return 

.controller 'NavCtrl',($scope,User,$window)-> 
    $scope.is_authenticated = $window.localStorage.getItem "authFlag" 
    console.log $window.localStorage.getItem "token" 
    console.log $window.localStorage.getItem "authFlag" 
    $scope.logout =()-> 
     User.logout() 
     $scope.is_authenticated = $window.localStorage.getItem "authFlag" 
    return 

User是工廠,我所定義和authFlagbool存儲在auth狀態。基本上我想聽聽authFlag

此外,如果可能請評論,如果這是最佳做法或我做錯了。

回答

0

這個問題可以通過添加一個簡單的brodcast來解決。裏面的用戶工廠,認證情況,添加

$rootScope.$broadcast 'authEvt'

navCtrl捕獲廣播使用

$rootScope.$on "authEvt",()-> $scope.is_authenticated = $window.localStorage.getItem "authFlag" return

這將重新加載localStorage的變化事件的變量。

+0

我認爲你應該使用路由器來切換用於每種情況的視圖(/ login和/ main - after/login)。導航欄只能在/登錄後立即加載 –

+0

@VuQuyet導航欄是相同的模板儀表板和登錄頁面。我也嘗試過使用$ location.path,但即使這樣做不起作用,我得到一個頂部帶有登錄按鈕的儀表板。只有當我重新加載應用程序,我得到註銷按鈕。我在網上找到的最佳方式是使用活動:) – georoot