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

Any difference between angular $inject property and inline array annotation?

阅读 angular docs on dependency injection,有两种适合缩小的方法:

推荐内联的(第一个)。在我的一个项目中,风格指南坚持使用 $inject 属性。我也经常在开源代码中看到 $inject 属性 形式。

因此问题:

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

我想到了两个,但它们看起来不太合法:

还有什么我想念的吗?

您应该使用 ng-annotate。如果您正在使用构建工具(您应该),请将 ng-annotate 插件与您的构建工具一起使用。

第二种方法的主要优点是它对模块友好。

class MyClass {
    constructor($q) {}
}

MyClass.$inject = ['$q']

module.exprots = MyClass

可以正常使用class

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

或者给angular

angular.service('MyClass', MyClass)

你真的做不到

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

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

之外无法使用

但如果您不使用模块或 OOP,第一种方法更简单

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

不需要为它制作class