当我需要在每次将其用于路线或指令时指定用于模板的控制器时,我发现自己很恼火。当模板耦合到具有controllerAs
语法的控制器时会变得更糟,我必须记住它必须是哪个名称。
$routeProvider.when('/', {
templateUrl: 'stateTemplate.html',
controllerAs: 'ctrl',
controller: 'StateController'
});
ngDialog.open({
template: 'stateTemplate.html',
controller: "StateController",
controllerAs:"ctrl"
});
我宁愿在模板中指定ng-controller StateController as ctrl
,也完全跳过其他地方的controller
和controllerAs
。
问题是:这种方法有一些我现在看不到的陷阱吗?它为什么不好(如果是的话)?显式controller
和controllerAs
参数的好处是否反对在相应模板中使用ng-controller
?哪里可以了解更多信息?
答案 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-controller
。 bindToController
导致在实例化控制器之前将属性绑定到控制器。
您将失去的另一件事是控制器依赖性解析对象。
使用uiRouter
和ngRouter
,您可以使用解析对象,然后在解析依赖关系时将其传递到控制器。例如,在返回获取用户详细信息的调用之前,您不希望显示用户详细信息页面。一旦返回,它就可以传递给控制器的构造函数。这是使用ng-controller
时会失败的另一件事。 https://github.com/johnpapa/angular-styleguide#resolving-promises-for-a-controller
我确信在路由配置中使用声明的控制器还有其他好处。也许别人会指出他们。
尽管如此,使用它并没有错。您可能应该与它保持一致,以便您的代码可以预测。如果您选择使用ng-controller
,将来更改它可能不是什么大问题。特别是如果您设置了量角器网络测试,以便您知道自己没有破坏任何东西。
答案 1 :(得分:0)
最快的答案 - 糟糕。
您无法在控制器模板中定义业务逻辑。如果您现在需要使用30个不同的控制器怎么办?你打算指定30个不同的控制器吗?这很麻烦,没有任何建议,这是一个不好的做法。
就像在输入逻辑层中编写BLL,或在客户端代码中编写身份验证一样。你只是在这里努力。
在模板中定义控制器绝对不是您正在寻找的答案。