1

在 AngularJS 中,我有两个冗长的控制器,它们是相同的——除了顶部的一个变量定义(它在整个控制器的多个位置用于决定要处理的内容)。

如何将这两个控制器合并为一个控制器?

是否有类似控制器工厂的东西可以接受参数(我的变量)?

在路由器中指定变量时,您可以将变量传递给控制器​​吗?通过 html 中的 ng-controller 手动调用控制器时可以传递变量吗?

像这样的东西:

ControllerA
{
    mode = 'A';
    MakeControllerRealAndUseItInsteadOfCurrentController(mode);
}

ControllerB
{
    mode = 'B';
    MakeControllerRealAndUseItInsteadOfCurrentController(mode);
}

ControllerReal( mode )
{
    mode = mode;
    // actual controller content
}
4

1 回答 1

3

Angular 中的控制器与它们交互的视图紧密绑定,实际上视图具有ng-controller基于哪个控制器被实例化的声明。控制器不是可以在 app\views 之间共享的实用功能。由于控制器正在执行类似的功能,因此视图可能非常相似。

您可以重用控制器代码的一些方法是

  • 将不直接影响视图的任何代码重构为服务并从控制器调用服务。
  • 如果视图相似,可以查看可重用指令,使用它们自己的控制器,以创建视图的特定部分,可以跨视图使用。
  • 对于以上几点,您还可以创建部分模板,这些模板可以拥有自己的控制器,并使用ng-include.
于 2013-08-14T10:49:39.807 回答