Javascript AngularJS控制器:正确的方法
所以,我一直在和同事讨论创建AngularJS控制器的“正确方法”。我知道有几种方法可以创建一个,但我感兴趣的是让我的团队以同样的方式和“正确”的方式编写它们。通过“正确的方式”,我指的是易于阅读、可测试和性能良好。我确信关于创建控制器的最佳方法存在着相互竞争的理论,但我最感兴趣的是在一天结束时测试能力,因为这是AngularJS构建的目的 毫无疑问,以下是竞争对手: 假设我们的应用程序声明为:Javascript AngularJS控制器:正确的方法,javascript,angularjs,testing,web-applications,Javascript,Angularjs,Testing,Web Applications,所以,我一直在和同事讨论创建AngularJS控制器的“正确方法”。我知道有几种方法可以创建一个,但我感兴趣的是让我的团队以同样的方式和“正确”的方式编写它们。通过“正确的方式”,我指的是易于阅读、可测试和性能良好。我确信关于创建控制器的最佳方法存在着相互竞争的理论,但我最感兴趣的是在一天结束时测试能力,因为这是AngularJS构建的目的 毫无疑问,以下是竞争对手: 假设我们的应用程序声明为:var-app=angular.module('app',[]) 1. app.controller(
var-app=angular.module('app',[])代码>
1.
app.controller('myCtrl', function(){
...
});
function myCtrl = {
...
}
app.controller('Ctrl', myCtrl);
(function(app) {
app.controller('myCtrl', function() {
...
}
})(app);
2.
app.controller('myCtrl', function(){
...
});
function myCtrl = {
...
}
app.controller('Ctrl', myCtrl);
(function(app) {
app.controller('myCtrl', function() {
...
}
})(app);
3.
app.controller('myCtrl', function(){
...
});
function myCtrl = {
...
}
app.controller('Ctrl', myCtrl);
(function(app) {
app.controller('myCtrl', function() {
...
}
})(app);
如果我错过了一个,请告诉我
这没有考虑缩小所需的更改,因此请不要将此添加到此对话中
谢谢!(我希望这不会引发一场火焰战>我的团队只使用1。我也考虑过3,我们只是有一个固定规则(和jshint约束)关于全局级代码。我永远不会使用2。Angular团队最近发布了一份最佳实践指南,因此这可能是一个很好的起点:。本演示还讨论了创建控制器的一些最佳实践:
如果您使用的是数字2,则实际上不需要app.controller('Ctrl',myCtrl);
。您可以从ng controller
引用控制器,即使它未使用模块.controller(…)
您可能还想考虑让控制器像JavaScript允许的那样使用“类”,并使用“控制器AS”语法。
var myApp = angular.module("myApp", []);
myApp.MyCtrl = function($log) {
this.$log = $log;
}
myApp.MyCtrl.prototype.sayHello = function() {
this.$log('hello');
}
在某些情况下,全局访问控制器可能很有用。例如,如果要使用$injector.instantiate()创建控制器的实例,则需要访问其构造函数(尽管可以使用$controller服务通过字符串实现相同的目标)
但是,如果您没有使控制器成为全局控制器的特定用例,您可能应该使用module.controller(…);
来封装它们
这个答案还提倡使用module.controller()
我总是这样做:
angular.module('myModule').controller('MyController', ['$scope', function($scope) {
<stuff>
}]);
angular.module('myModule').controller('MyController',['$scope',function($scope){
}]);
是的,它更详细一点,但它在全局范围内没有创建任何内容,很清楚控制器属于哪个模块,如果需要将控制器分离到另一个文件中,我只需复制并通过它,而不必担心“app”在何处定义,也不必担心在链式声明中是否遗漏了“.”
我知道我应该忽略它,但这个版本当然是小型化安全的
总的来说,我认为你应该找到一个明确的标准并坚持下去。这样,如果某件事情看起来不“正确”,你可以马上告诉我。谢谢@rob!我一定会查看他们的风格指南和最佳实践。