用服务更改控制器之间的数据

时间:2014-06-25 16:27:49

标签: angularjs

当我使用它时,它可以工作:`

angular.module('app').service('DataService', function() {
   return {theme: "amelia"}
});

但是当我使用它时,没有更新?你能告诉我区别吗?

angular.module('app').service('DataService', function() {
    return {
        theme: function() {
            return {theme: "amelia"}
        }  
    };
});

控制器

$scope.settings = DataService.theme();

select.form-control(ng-model="settings.theme", ng-options="theme for theme in themes")

第二种方式是否可行?因为我会分享更多数据然后一个对象!

谢谢!

2 个答案:

答案 0 :(得分:1)

代码的第一个版本调用函数一次以实例化服务。之后,因为服务是角度的单例,所以函数不会被再次调用,而是在每个使用控制器的中访问返回值("静态"对象)之后的服务。

第二个版本,您注入服务的每个控制器都会调用theme函数,该函数每次都会实例化一个全新的对象。您现在已经有效地减轻了服务是单身的事实。这就是为什么数据不会与第二组代码共享的原因。

如果在每种情况下在函数调用上设置断点并运行代码,您应该看到第一个版本调用一次,而第二个版本将被调用多次。

"让它工作" ...

您无法使用函数调用,但如果您需要共享多个数据对象,则没有任何理由不对它们进行嵌套。你可以很容易地做一些事情:

angular.module('app').service('DataService', function() {
   return {
      dataObjects: [
         {"type":"theme", "theme":"amelia"},
         {"type":"user", "id":123, "name":"ABC"}
      ]};
});

在示例中,我添加了第二个对象,它是一个用户对象,用于共享" dataObjects"阵列。在" dataObjects"中查找特定对象数组,你可以循环,直到找到正确的类型("主题",例如)。如果您需要将对象设置为原始对象(没有添加的类型属性),如果有必要,您甚至可以更深地嵌套一层。

希望有所帮助!

答案 1 :(得分:0)

它应该是主题:function()....在你的服务中。替换" ="与":"。