我刚开始使用 AngularJS,我正在努力研究依赖注入(inject)。 具体来说,我试图了解 DI 和使用 RequireJS 声明依赖关系之间的区别。
Angular 中的 DI 是否仅适用于在某些 angular.module 上定义的“对象”(工厂、服务、模型)?例如,我可以使用 DI 依赖一些外部库,例如 jQuery 吗?
总的来说,RequireJS 中的依赖管理和 Angular 中的 DI 的区别是不是可以这样说:
RequireJS 仅在第一次需要它们时处理加载依赖项(延迟加载)并确保所有依赖项在执行前都存在,而 Angular DI 允许在运行时轻松更改依赖项,只要它的接口(interface)保持不变?
最后,DI 是否总是传递依赖实例?每次都是一个新实例,还是一个单例?它可以传递一个我可以实例化自己的“类”定义吗?例如,如果我需要将选项传递给构造函数怎么办?
最佳答案
Does DI in Angular only work for "objects" (Factories, Services, Models) which are defined on some angular.module?
是的。该模块实际上是服务等的包装。
could I depend on some external library like jQuery using DI?
是的,我们是这样做的:myModule.constant("jQuery", window.$)
。
A new instance every time, or a singleton?
除了 $scope
之外,总是一个单例。此外, Controller 总是重新实例化(但 Controller 功能当然仍然是单例)。
Can it pass in a "Class" definition which I can instantiate myself?
当然可以。只需从定义函数返回构造函数,例如:(编辑:这必须与 factory
一起使用;使用 service
将实例化 MyClass
并将实例用于服务值)
factory("Xxx", function(dep1, dep2) {
function MyClass() {
...
}
MyClass.prototype.method = function() ...
return MyClass;
});
这也是你可以用 RequireJS 做的。
至于与 RequireJS 的区别:我可以肯定地说的一件事是 RequireJS 结合了脚本加载器和 DI 框架(以及优化器)。因此 Require (AMD) 模块与脚本文件具有 1-1 关系。另一方面,Angular 模块和服务与文件没有必要的关系。
除此之外,他们看起来和我很像。
关于javascript - AngularJS 中的依赖注入(inject)是否仅适用于 Angular "Objects"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19156002/