控制器工厂在角度

时间:2013-08-14 10:32:35

标签: angularjs controller

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

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

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

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

这样的事情:

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

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

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

1 个答案:

答案 0 :(得分:3)

Angular中的Controller与它们交互的视图紧密绑定,实际上视图根据实例化的控制器声明了ng-controller。控制器不是可以在app \ views中共享的实用程序功能。由于控制器正在执行类似的功能,因此视图可能非常相似。

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

  • 将任何不直接影响视图的代码重构为服务,并从控制器调用服务。
  • 如果视图相似,可以查看具有自己的控制器的可重用指令,以创建视图的特定部分,可以跨视图使用。
  • 对于上述内容,您还可以创建可以拥有自己的控制器的部分模板,并使用ng-include重复使用它们。