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

时间:2015-07-28 02:33:09

标签: javascript angularjs

我一直在阅读有关角度的内容,以便学习一些应用于我正在处理的应用程序中的最佳实践。我经历了一个部分,讨论缩小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)

我的第一个问题是,在第二个例子中,当控制器被注册并且字符串作为参数传递时,那么名为" controllerOne"的函数确实具有相同的好处(至于缩小)在第一个例子中传递数组?

我的第二个问题是,优先于其他方法的首选方法之一,或者这是一个“你更熟悉”的情况吗?

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

4 个答案:

答案 0 :(得分:2)

  1. 将控制器名称注册为字符串对缩小没有影响。传递依赖项确实会产生影响。你需要以缩小安全的方式传递它们。您还可以使用<resources> <style name="AppTheme" parent="Theme.AppCompat.Light"> <item name="android:colorPrimary">@color/primary</item> <item name="android:statusBarColor">@color/primary</item> <item name="android:colorPrimaryDark">@color/primary_dark</item> <item name="android:textColorPrimary">@color/primary_text</item> <item name="android:textColorSecondary">@color/secondary_text</item> <item name="android:colorAccent">@color/accent</item> <item name="android:textColor">@color/textColor</item> </style> </resources> 服务注入依赖项。

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

  3. https://github.com/johnpapa/angular-styleguide

答案 1 :(得分:1)

您是否尝试过Google的关闭(https://developers.google.com/closure/)? jsdoc中的@ngInject应该很好地处理缩小。我每天都使用闭包,我必须说它非常强大。学习曲线在开始时非常陡峭,但最终,你会开始喜欢它

答案 2 :(得分:0)

第二个例子太多不同,无法比较。它不会注入$scope并假设"ControllerAs" syntax in template

我认为关于控制器的阵列注入语法的所有这些大惊小怪都是多余的。如果您正在使用缩小功能,请使用ng-annotate并使代码尽可能清晰。因为支持/修复代码比编写代码更昂贵,所以编写它等等,然后让计算机对其进行任何类型的自动化。

答案 3 :(得分:0)

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

    请注意,所有injectable都已定义并缓存在module的某个空格中。

    • 选项二,缩小工具可能会将函数参数$scope重命名为某个较短的名称,例如s,它未在模块定义中定义。
    • 选项一:Angular将获取字符串$scope,在范围内找到它的定义,然后运行类似s = $scope的内容,最后运行控制器。所以请致电injection
  2. 始终使用选项一。

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