所以,我一直在与同事讨论创建AngularJS控制器的“正确方法”。我知道有几种创建方法,但我有兴趣让我的团队以同样的方式和“正确”的方式编写它们。通过“正确的方式”,我所说的易于阅读,可测试和高效。我确信在创建控制器的最佳方法上存在竞争理论,但我最感兴趣的是在一天结束时的测试能力,因为这是AngularJS的良好构建。
不用多说,这里是竞争者:
我们假设我们的应用被声明为: var app = angular.module('app',[]);
1
app.controller('myCtrl', function(){
...
});
2
function myCtrl = {
...
}
app.controller('Ctrl', myCtrl);
第3
(function(app) {
app.controller('myCtrl', function() {
...
}
})(app);
如果我错过了,请告诉我。
这不会考虑缩小所需的更改 所以请不要将其添加到此对话中。
谢谢! (我希望这不会引发火焰战争><)
答案 0 :(得分:1)
我的团队专门使用1.我也考虑了3,我们只有一个关于全局级代码的常规规则(和jshint约束)。我永远不会用2。
答案 1 :(得分:1)
我总是这样做:
angular.module('myModule').controller('MyController', ['$scope', function($scope) {
<stuff>
}]);
是的,它稍微冗长一点,但它在全局范围内没有任何创造,很清楚控制器属于哪个模块,如果我需要将我的控制器分成另一个文件,我只需复制并通过它而不用担心app&#39;定义或关于我是否错过了&#39;。在链式声明中。
我知道我应该忽略它,但当然这个版本是缩小安全的。
总的来说,我相信你应该找到一个明确的标准并坚持下去。那样的话,如果有什么东西看起来没有&#34;对&#34;你可以马上告诉。
答案 2 :(得分:0)
Angular团队最近发布了最佳实践指南,因此可能是一个很好的起点:http://blog.angularjs.org/2014/02/an-angularjs-style-guide-and-best.html。此演示文稿还讨论了有关创建控制器的一些最佳实践:https://docs.google.com/presentation/d/1OgABsN24ZWN6Ugng-O8SjF7t0e3liQ9UN7hKdrCr0K8/present?pli=1&ueb=true&slide=id.p
如果你使用的是数字2,那么你真的不需要app.controller('Ctrl', myCtrl);
。您可以从ng-controller
引用控制器,即使它未使用module.controller(...)
你可能还想考虑让你的控制器和javascript允许的“类”一样,并使用'controller as'语法。
var myApp = angular.module("myApp", []);
myApp.MyCtrl = function($log) {
this.$log = $log;
}
myApp.MyCtrl.prototype.sayHello = function() {
this.$log('hello');
}
有些情况下,您可以全局访问控制器。就像你想用$ injector.instantiate()创建一个控制器实例一样,你需要访问它的构造函数(尽管你可以使用$ controller服务来使用字符串来实现相同的目标)。
var myCtrl = $injector.instantiate(myApp.MyCtrl); //Works
var myCtrl2 = $injector.instantiate('MyCtrl'); //Doesn't Work
但是如果你没有一个特定的用例来使你的控制器全局化,你应该用module.controller(...);
封装它们。
此答案还提倡使用module.controller()
https://stackoverflow.com/a/13363482/373655