Javascript 用于创建服务和控制器的角度语法

Javascript 用于创建服务和控制器的角度语法,javascript,angularjs,Javascript,Angularjs,我已经阅读了很多关于angular的文章,学习了一些在我正在开发的应用程序中应用的最佳实践。我读了一节,讨论了如何缩小javascript以及如何首选以下语法: var myApp = angular.module('myApp',[]); myApp.controller('Controller', ['$scope', function($scope) { //code }]); var myApp = angular.module('myApp', []); function Co

我已经阅读了很多关于angular的文章,学习了一些在我正在开发的应用程序中应用的最佳实践。我读了一节,讨论了如何缩小javascript以及如何首选以下语法:

var myApp = angular.module('myApp',[]);

myApp.controller('Controller', ['$scope', function($scope) {
  //code
}]);
var myApp = angular.module('myApp', []);
function ControllerOne($scope) {
 //code
}
myApp.controller('ControllerOne', ControllerOne)
然而,我也听到一些人说,以下语法是首选的:

var myApp = angular.module('myApp',[]);

myApp.controller('Controller', ['$scope', function($scope) {
  //code
}]);
var myApp = angular.module('myApp', []);
function ControllerOne($scope) {
 //code
}
myApp.controller('ControllerOne', ControllerOne)
我的第一个问题是,在第二个示例中,当注册控制器并将字符串作为参数传递时,那么名为“controllerOne”的函数是否具有与第一个示例中传递数组相同的好处(就缩小而言)

我的第二个问题是,这两种方法中有哪一种更受欢迎,还是“你更喜欢什么?”


现在看一下,我可以看到第二种方法如何更灵活,因为该函数不受实际控制器的影响,并且可以重用,而第一个示例代码特定于该特定控制器,因为它被声明为数组的一部分。这是否正确?

第二个示例差异太大,无法进行比较。它不是注入
$scope
,而是假设

我认为对于控制器的阵列注入语法来说,所有这些都是多余的。如果您使用的是缩小,请尽可能使用并使代码清晰。因为支持/修复代码比编写代码更昂贵,比让计算机对其进行任何形式的自动化都要昂贵

  • 将控制器名称注册为字符串对缩小没有影响。传递依赖项确实有效果。你需要以安全的方式通过它们。您还可以使用
    $inject
    服务来注入依赖项

  • 要获得编写角度代码的所有最佳方法,请遵循John Papa的角度样式指南


  • 你尝试过谷歌的关闭()吗?jsdoc中的@ngint应该很好地处理缩小问题。我每天都在使用闭包,我必须说它非常健壮。开始时,学习曲线相当陡峭,但最终,你会开始喜欢它

  • 使用内联声明(选项一)完全是为了缩小后的正确性

    请注意,所有
    可注入的
    都已定义并缓存在
    模块
    的某些空间中

    • 选项二,缩小工具可能会将函数参数
      $scope
      重命名为较短的名称,例如
      s
      ,该名称未在模块定义中定义
    • 选项一:Angular将获取字符串
      $scope
      ,在scope上找到它的定义,然后运行类似
      s=$scope
      ,最后运行控制器。所以调用
      注入
  • 始终使用选项一


  • 您可能希望使用选项一,最小化代码,然后看看会发生什么。

    对不起,输入错误,我的意思是将$scope传递到第二个示例控制器。大多数情况下,控制器是不可重用的,它们与视图紧密相连,两种语法都可以正常工作。我刚刚阅读了Ajay Kumar答案中的链接,并讨论了inject方法。看起来很不错,谢谢你指出!