在控制器中使用$ controller是否可以?

时间:2013-06-03 11:35:16

标签: angularjs

我不想重复我在其中一个控制器中使用的相同代码,因此我有两个选择:

  • 在其他控制器中使用$controller服务以获得某种继承
  • 在同一ng-controller上使用多个element - 但我不知道这是否可行?

实现某种控制器继承的最佳解决方案是什么?

3 个答案:

答案 0 :(得分:5)

引用Angular Docs: Controller Inheritance Example

  

Angular中的Controller继承基于Scope继承。

example in the docs而言,您可以将常用方法放在$scope ChildCtrl内,然后$scopeBabyCtrl内自动提供这些方法1}}。

虽然就个人而言,我更喜欢将公共代码添加到服务中并将该服务注入多个控制器。

答案 1 :(得分:3)

混合控制器没有问题。您不能在同一元素中使用ng-controller两次,因此您需要注入$controller或创建一个绑定到控制器的指令。

在元素的主控制器中注入$controller没有多大意义,而是创建一个绑定到组件化控制器的指令,这样,你就会对一个行为进行组件化。请参阅此回答When to write a directive?以了解我所说的内容。

控制器用于控制$scope,并且您无法扩展控制器。让多个控制器更改单个作用域并将其用作它们之间的通信媒介是没有问题的。

如果您有重复操作但不一定需要范围,只需使用服务,就像获取数据,操纵对象,计算等一样。

答案 2 :(得分:2)

您还可以考虑将常用功能隔离到服务中。