angular $inject 属性 和内联数组注释之间有什么区别?
Any difference between angular $inject property and inline array annotation?
阅读 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)
还有什么我想念的吗?
您应该使用 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
阅读 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)
还有什么我想念的吗?
您应该使用 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