仅在模板中指定控制器是好还是坏?

时间:2015-07-26 11:44:45

标签: angularjs

当我需要在每次将其用于路线或指令时指定用于模板的控制器时,我发现自己很恼火。当模板耦合到具有controllerAs语法的控制器时会变得更糟,我必须记住它必须是哪个名称。

$routeProvider.when('/', {
  templateUrl: 'stateTemplate.html',
  controllerAs: 'ctrl',
  controller: 'StateController'
});

ngDialog.open({
    template: 'stateTemplate.html',
    controller: "StateController",
    controllerAs:"ctrl"
});

我宁愿在模板中指定ng-controller StateController as ctrl,也完全跳过其他地方的controllercontrollerAs

问题是:这种方法有一些我现在看不到的陷阱吗?它为什么不好(如果是的话)?显式controllercontrollerAs参数的好处是否反对在相应模板中使用ng-controller?哪里可以了解更多信息?

2 个答案:

答案 0 :(得分:2)

我想很多人都误解了你的问题。我是否正确地将其解释为:

仅在Route Config中定义视图,然后使用ng-controller="StateController as ctrl"将该视图绑定到控制器有什么问题?

所以不是上面的例子,你会有:

$routeProvider.when('/', {
  templateUrl: 'stateTemplate.html',
});

ngDialog.open({
    template: 'stateTemplate.html',
});

然后在你的stateTemplate.html中你会有类似的东西:

<div ng-controller="StateController as ctrl">
    <h1>State</h1>
    . . .
</div>

这是你要问的吗?

如果是这样,这没有任何问题。您将失去重用具有不同视图的控制器的能力。但老实说,这可能不是一个真正的问题。

如果在指令中使用bindToController(您应该),您仍然希望在指令数据对象中声明控制器,而不是使用ng-controllerbindToController导致在实例化控制器之前将属性绑定到控制器。

您将失去的另一件事是控制器依赖性解析对象。

使用uiRouterngRouter,您可以使用解析对象,然后在解析依赖关系时将其传递到控制器。例如,在返回获取用户详细信息的调用之前,您不希望显示用户详细信息页面。一旦返回,它就可以传递给控制器​​的构造函数。这是使用ng-controller时会失败的另一件事。 https://github.com/johnpapa/angular-styleguide#resolving-promises-for-a-controller

我确信在路由配置中使用声明的控制器还有其他好处。也许别人会指出他们。

尽管如此,使用它并没有错。您可能应该与它保持一致,以便您的代码可以预测。如果您选择使用ng-controller,将来更改它可能不是什么大问题。特别是如果您设置了量角器网络测试,以便您知道自己没有破坏任何东西。

答案 1 :(得分:0)

最快的答案 - 糟糕。

您无法在控制器模板中定义业务逻辑。如果您现在需要使用30个不同的控制器怎么办?你打算指定30个不同的控制器吗?这很麻烦,没有任何建议,这是一个不好的做法。

就像在输入逻辑层中编写BLL,或在客户端代码中编写身份验证一样。你只是在这里努力。

在模板中定义控制器绝对不是您正在寻找的答案。