将本地存储身份验证令牌状态与视图同步

时间:2016-11-04 06:26:00

标签: javascript angularjs angular-local-storage

我在角度js中有两个控制器。

  • NavCtrl 控制导航栏并根据需要显示注销按钮
  • AuthCtrl ,负责身份验证和设置本地存储

我面临的问题是,在两个控制器中设置令牌并检索令牌时,一切正常。

但是当我进行身份验证时,我需要重新加载页面以查看NavCtrl中的更改,因为它在呈现页面时获取值。当有loginlogout请求相应地呈现更改时,有什么方法可以将通知传递给NavCtrl吗?

.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,用于存储身份验证状态。基本上我想听取authFlag

中所做的更改

如果可能的话,请评论这是最佳做法还是我做错了。

1 个答案:

答案 0 :(得分:0)

通过添加简单的brodcast可以解决此问题。在进行身份验证的用户工厂内,添加

$rootScope.$broadcast 'authEvt'

并在navCtrl中使用

捕捉广播

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

这会在更改localStorage事件时重新加载变量。