javascript - AngularJS 中的依赖注入(inject)是否仅适用于 Angular "Objects"?

标签 javascript angularjs dependency-injection requirejs

我刚开始使用 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/

相关文章:

javascript - Google Analytics - 如何使用 DataLayer 设置自定义变量

javascript - 在 Angular/JavaScript 中添加二维数组

javascript - Nestjs 无法解决依赖关系

c# - 使用 Unity 将对注册类型和具体对象的依赖注入(inject)到构造函数中

c# - 使用 Ninject,我可以在不公开具体类的情况下从接口(interface)创建实例吗?

javascript - 为什么递归函数在返回数组上返回未定义?

javascript - MVC Action 通过 Jquery AJAX 请求接收到错误的参数

javascript - 使用 javascript 操作 css 层

javascript - 已选择 Angular 空白选项

javascript - Angular 1.6 中可能未处理的拒绝