AngularJS - 控制器之间的共享状态?

Rog*_*son 11 angularjs

我知道有关如何在Angular控制器之间传递数据的其他类似问题.

我想知道如何在视图中处理这个问题..

假设我有一个用于登录,注册等的UserController和一个用于实际应用程序功能的AppController.

UserController相当容易,其余部分独立.但是如果应用程序需要了解用户控制器中的内容呢?

让我们说应用程序视图需要隐藏/显示内容,具体取决于用户是否登录.或者可能是用户是男性还是女性等.

应用模型应该保留自己的用户模型状态副本吗?例如appModel.isLoggedIn,appModel.gender等?

感觉有点多余,但同时更可测试.

那么这样做的正确方法是什么?

Gol*_*den 17

简短的回答

创建服务,请参阅创建服务以获取详细信息.

答案很长

服务本身就是应用程序范围的单例,因此它们非常适合保持状态跨越视图,控制器和协作.

app.factory('myService', [ function () {
  'use strict';
  return {
    // Your service implementation goes here ...
  };
}]);
Run Code Online (Sandbox Code Playgroud)

一旦编写并注册了服务,就可以使用AngularJS的依赖注入功能在控制器中使用它:

app.controller('myController', [ 'myService', '$scope',
  function (myService, $scope) {
  'use strict';
  // Your controller implementation goes here ...
}]);
Run Code Online (Sandbox Code Playgroud)

现在,在控制器内部,您拥有myService包含服务的单个实例的变量.在那里,您可以拥有一个isLoggedIn表示您的用户是否已登录的属性.