【问题标题】:Controller factory in angular角度控制器工厂
【发布时间】:2013-08-16 06:22:34
【问题描述】:

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

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

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

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

类似这样的:

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

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

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

【问题讨论】:

    标签: angularjs controller


    【解决方案1】:

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

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

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

    【讨论】:

    • 我设法将两个视图合并为一个(每个 mode 采用不同的 routeParam)。基于此,我还可以使用这个 routeParam 将两个控制器合二为一。
    • 很高兴我能在这里提供一些帮助:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-02
    相关资源
    最近更新 更多