AngularJs:将"控制器传递给"一个服务,这是一个好习惯吗?

时间:2015-03-25 19:57:03

标签: angularjs anti-patterns

我们说我有一个控制器,如:

angular.app("myapp",[]).controller("MyCtrl", function (MyService){

         var vm = this;

         vm.value1 = something();
         vm.array1 = somethingElse;

        //notice that I pass the whole controller as object to the service.
        MyService.getData(vm); 

         //do something with data...
         doWithNewData(vm.elementCreatedByMyService);

}). etc...

现在,传递vm本身似乎有道理,因为我不需要传递多个值,而且有几个控制器调用此服务。

这似乎有点矫枉过正,因为当然,vm比服务中使用的元素要多得多。

此外,这有利于重复使用(正如我在生产中发现的那样)。

我的问题是:这是一个反模式还是有效使用"控制器作为"宾语? 现在,如果这是反模式,那应该做什么呢?

提前致谢...

1 个答案:

答案 0 :(得分:1)

这里没有什么可以称之为反模式。但是也没有什么好处,因为它要求服务知道vm,对现有vm属性的任何更改都会影响控制器的范围(不需要以理想的方式) )。

  

现在,如果这是反模式,那应该做什么呢?

将本地变量传递给服务并在需要时将其合并到控制器的范围内?