一尘不染

如何在AngularJS中存储当前用户上下文?

angularjs

我有一个AuthService,用于登录用户,它返回一个用户json对象。我要做的是设置该对象,并使所有更改反映在整个应用程序中(登录/注销状态),而无需刷新页面。

我将如何使用AngularJS做到这一点?


阅读 248

收藏
2020-07-04

共1个答案

一尘不染

完成此操作的最简单方法是使用服务。例如:

app.factory( 'AuthService', function() {
  var currentUser;

  return {
    login: function() { ... },
    logout: function() { ... },
    isLoggedIn: function() { ... },
    currentUser: function() { return currentUser; }
    ...
  };
});

然后,您可以在任何控制器中引用它。以下代码监视服务中值的更改(通过调用指定的函数),然后将更改的值同步到作用域。

app.controller( 'MainCtrl', function( $scope, AuthService ) {
  $scope.$watch( AuthService.isLoggedIn, function ( isLoggedIn ) {
    $scope.isLoggedIn = isLoggedIn;
    $scope.currentUser = AuthService.currentUser();
  });
});

然后,当然可以使用您认为合适的信息;例如,在指令,模板等中。您可以在菜单控制器等中重复此操作(根据您的需要进行定制)。当您更改服务的状态时,所有这些都将自动更新。

任何更具体的内容都取决于您的实现。

希望这可以帮助!

2020-07-04