0

我在 Angular 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

另外,如果可能的话,请评论这是否是最佳做法,或者我做错了什么。

4

1 回答 1

0

这个问题可以通过添加一个简单的广播来解决。在发生身份验证的用户工厂内,添加

$rootScope.$broadcast 'authEvt'

navCtrl使用

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

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

于 2016-11-04T06:43:43.630 回答