Answers:
实现此目的的最简单方法是使用服务。例如:
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();
  });
});然后,当然可以使用您认为合适的信息;例如,在指令,模板等中。您可以在菜单控制器等中重复此操作(根据您需要执行的操作)。更改服务状态时,所有这些都将自动更新。
任何更具体的内容都取决于您的实现。
希望这可以帮助!
AuthService。这不仅有助于刷新页面,而且还有助于在新标签页中打开链接的人。
                    ui-router)和路由解析是使auth控件保持DRY的好方法。你写的东西听起来不错。
                    我要补充一下Josh的良好回应,因为AuthService通常是任何人都感兴趣的(例如,如果没有人登录,则登录视图之外的任何人都应该消失),也许更简单的选择是使用$rootScope.$broadcast('loginStatusChanged', isLoggedIn);(1 )(2),而相关方(例如控制者)会使用收听$scope.$on('loginStatusChanged', function (event, isLoggedIn) { $scope.isLoggedIn = isLoggedIn; }。
(1)$rootScope作为服务的论点被注入
(2)请注意,在异步登录操作的可能情况下,您需要通过将Angular包含在$rootScope.$apply()函数中来通知Angular广播将改变事物。
现在,谈到在每个控制器中保留用户上下文,您可能不愿意在每个控制器中监听登录更改,并且可能更喜欢仅在最顶层的登录控制器中监听,然后将其他可识别登录的控制器添加为子控件/嵌入式控制器。这样,子级控制器将能够看到继承的父级$ scope属性,例如您的用户上下文。