阅读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)
我还缺少什么?
答案 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) {}])
没有必要为它做一个课