【问题标题】:angular syntax for creating services and controllers用于创建服务和控制器的角度语法
【发布时间】:2015-07-28 17:30:21
【问题描述】:

我一直在阅读有关 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)

我的第一个问题是,在第二个示例中,当注册控制器并将字符串作为参数传递时,名为“controllerOne”的函数是否与传递第一个例子中的数组?

我的第二个问题是,首选方法之一是优于其他方法,还是“您更喜欢哪种方法”?

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

【问题讨论】:

  • 控制器大多不可重用,它们与视图紧密相关,两种语法都可以正常工作。

标签: javascript angularjs


【解决方案1】:
  1. 将控制器名称注册为字符串对缩小没有影响。传递你的依赖确实有效果。您需要以缩小安全的方式传递它们。也可以使用$inject服务注入依赖。

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

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

【讨论】:

    【解决方案2】:

    你试过谷歌的关闭(https://developers.google.com/closure/)吗? jsdoc 中的 @ngInject 应该很好地处理缩小问题。我每天都使用闭包,我必须说它非常强大。一开始的学习曲线相当陡峭,但最终你会开始爱上它

    【讨论】:

    • 我只是在阅读 Ajay Kumar 的答案中的链接,它介绍了注入方法。看起来很不错,谢谢指出!
    【解决方案3】:

    第二个例子差异太大,无法比较。它没有注入$scope,而是假设"ControllerAs" syntax in template

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

    【讨论】:

    • 对不起,错字,我的意思是将 $scope 传递到第二个示例中
    【解决方案4】:
    1. 使用内联声明(选项一)完全是为了缩小后的正确性。

      请注意,所有injectables 都被定义并缓存在module 的某些空间中。

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

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

    【讨论】:

      猜你喜欢
      • 2016-01-09
      • 1970-01-01
      • 2015-08-17
      • 1970-01-01
      • 2016-09-02
      • 1970-01-01
      • 1970-01-01
      • 2017-02-27
      • 2021-11-16
      相关资源
      最近更新 更多