angular $ inject属性和内联数组注释之间有什么区别吗?

时间:2016-10-24 23:23:14

标签: javascript angularjs dependency-injection inject

阅读angular docs on dependency injection,有两种缩小友好的方法可以做到这一点:

  • 内联数组注释: module.factory("MyStuff",['dependency',function(dep){...}])
  • $inject属性: function MyStuff(dep) {...} MyStuff.$inject = ['dependency']; module.factory("MyStuff",MyStuff);

建议使用内联(第一个)。在我的一个项目中,样式指南坚持使用$inject属性。我也经常在开源代码中看到$inject属性表单。

因此问题:

使用$inject属性表单有哪些实际或技术好处?

从头顶我想出了两个,他们看起来不太合理:

  • 直接创建MyStuff的实例: new MyStuff(someOtherDependency).foo(...);
  • console.log(myStuffInstance)
  • 中有函数名称

我还缺少什么?

1 个答案:

答案 0 :(得分:1)

您应该使用ng-annotate。如果您正在使用构建工具(您应该),请在构建工具中使用ng-annotate插件。

第二种方法的主要好处是模块友好。

class MyClass {
    constructor($q) {}
}

MyClass.$inject = ['$q']

module.exprots = MyClass

您可以像普通班级一样使用它

const MyClass = require('./myclass')
const foo = new MyClass($q)

或将其赋予角度

angular.service('MyClass', MyClass)

你真的不能

module.exports = ['$q', MyClass]

因为它会使require('./myclass')在角度

之外无法使用

但是如果你不使用模块或OOP,第一种方法更容易

angular.service('MyClass', ['$q', function ($q) {}])

没有必要为它做一个课