是否存在格式化注入依赖项的约定?

时间:2014-02-16 17:01:46

标签: javascript angularjs dependency-injection code-formatting

Angular JS Dependencies

在使用内联括号表示时,是否有任何常用的约定如何格式化长依赖列表?浏览githubAngular JS Developer Guide后,我没有看到一致的方法。

我对个人认为最好的(对不起)不感兴趣,但是如果标准惯例最佳做法定义在我无法找到的地方。


实施例

标准

这是有效的,但它扩展到第212列。快速比较字符串和参数也很困难。

angular.module('donkey', []).controller('FooCtrl', ['$scope', '$http', 'someCoolService', 'anotherCoolService', 'somethingElse', function ($scope, $http, someCoolService, anotherCoolService, somethingElse) {
}]);

好一点

它仍然在第87栏,但很容易比较字符串和参数。

angular
  .module('donkey', [])
  .controller('FooCtrl', [
    '$scope', '$http', 'someCoolService', 'anotherCoolService', 'somethingElse',
    function ($scope, $http, someCoolService, anotherCoolService, somethingElse) {
  }]);

功能齐全,但有点奇怪。

我倾向于使用这个,因为它是水平紧凑的,并允许快速注释掉依赖项。但是,它看起来确实有点奇怪。

angular
.module('donkey', [])
.controller('FooCtrl', [
  '$scope',
  '$http',
  'someCoolService',
  'anotherCoolService',
  'somethingElse',
  function (
    $scope, 
    $http, 
    someCoolService, 
    anotherCoolService, 
    somethingElse) {
}])

额外学分

是否有一种方法可以满足JSLint的空格检查,并且还可以在Sublime Text 3中维护代码崩溃功能?

谢谢!


资源

Angular JS contributor coding rules没有提及它。

This best practice guide推荐给Google,Crockford等。

1 个答案:

答案 0 :(得分:5)

我不知道在Angular中注入依赖项的三个支持的方法之间存在一个公认的约定。

话虽这么说,我目前正在开发一个非常大的Angular项目,我们一直使用$inject语法来定义我们的依赖项。 documentation似乎也朝着这个方向发展。

所以我的建议是这样的。

将所有依赖项定义为对象

var SomeService = function($rootScope, $http, $q){
  this.$rootScope = $rootScope;
  this.$http = $http;
  this.$q = $q;
};

SomeService.$inject = ['$rootScope', '$http', '$q'];

myModule.service('someService', SomeService);

这样可以更容易推理您的代码,并允许您将服务,指令和控制器分离到不同的文件中。

除非是非常小的应用程序,否则我将不再使用匿名声明和所有依赖项的数组语法。