Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS控制器:正确的方法_Javascript_Angularjs_Testing_Web Applications - Fatal编程技术网

Javascript AngularJS控制器:正确的方法

Javascript AngularJS控制器:正确的方法,javascript,angularjs,testing,web-applications,Javascript,Angularjs,Testing,Web Applications,所以,我一直在和同事讨论创建AngularJS控制器的“正确方法”。我知道有几种方法可以创建一个,但我感兴趣的是让我的团队以同样的方式和“正确”的方式编写它们。通过“正确的方式”,我指的是易于阅读、可测试和性能良好。我确信关于创建控制器的最佳方法存在着相互竞争的理论,但我最感兴趣的是在一天结束时测试能力,因为这是AngularJS构建的目的 毫无疑问,以下是竞争对手: 假设我们的应用程序声明为:var-app=angular.module('app',[]) 1. app.controller(

所以,我一直在和同事讨论创建AngularJS控制器的“正确方法”。我知道有几种方法可以创建一个,但我感兴趣的是让我的团队以同样的方式和“正确”的方式编写它们。通过“正确的方式”,我指的是易于阅读、可测试和性能良好。我确信关于创建控制器的最佳方法存在着相互竞争的理论,但我最感兴趣的是在一天结束时测试能力,因为这是AngularJS构建的目的

毫无疑问,以下是竞争对手:

假设我们的应用程序声明为:
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!我一定会查看他们的风格指南和最佳实践。