在控制器之间共享数据:服务还是价值?

时间:2015-10-17 05:23:42

标签: angularjs angular-services

要在controllers之间共享数据,大多数Stack溢出答案建议使用services。大多数情况下,当我在controllers之间共享数据时,它是我的应用程序模型(Data),并且根据应用程序逻辑在每个controller中进行更改。那么,它应该不是angular value而不是angular service吗?

例如,请执行以下service

app.factory('Employee',function($http){
      function Employee(){
           this.data = {};
      }
      Employee.prototype.load = function(){
          //XHR call which invokes employee details and assigns it here
          $http.get(url).then(
                   function(response){
                         this.data = response.data;
                   }
          );
      }

      return new Employee();
});

有了这项服务,我inject Employee ui-router期间无法resolve services模型config无法注入value块)。但如果我使用stateRouting创建相同内容,我可以在value期间注入它。您能否告诉我为什么controllers不希望在service setContentView(R.layout.activity_main); 之间创建模型/共享数据?

1 个答案:

答案 0 :(得分:2)

首先,也不能将值注入配置块。但这是无关紧要的,因为在配置阶段不会调用resolve函数,而是在运行时,每次导航到封闭路径时都会调用。

根本无法注入价值观,所以在定义价值时,我真的不知道如何访问$ http。

最后,您可以在解析函数中访问您的服务,只需将其注入函数:

resolve: {
    employee: function(Employee) {
        return Employee.load();
    }
}

但这没有多大意义,因为你的load()方法没有返回任何东西。它应该做的是返回员工的承诺:

Employee.prototype.load = function(){
    return $http.get(url).then(
        function(response) {
            return response.data;
        }
    );
};

但这与控制器之间共享数据无关。它允许做的是等待员工数据可用并在切换到员工视图之前将其注入控制器。