AngularJS中的依赖注入是否仅适用于Angular"Objects"?

ela*_*anh 3 javascript dependency-injection requirejs angularjs

我开始使用AngularJS,而我正试图将依赖注入包裹起来.具体来说,我试图了解DI与使用RequireJS声明依赖关系之间的差异.

Angular中的DI是否只适用于某些angular.module上定义的"对象"(工厂,服务,模型)?例如,我可以依赖一些外部库,比如使用DI的jQuery吗?

一般来说,RequireJS中的依赖管理和Angular中的DI之间的区别可以这样说:

RequireJS仅在首次需要时加载依赖项(延迟加载)并确保在执行之前存在所有依赖项,而Angular DI允许在运行时轻松更改依赖项,只要它的接口保持不变即可?

最后,DI总是传递依赖的实例吗?每次都是一个新实例,还是一个单例?它可以通过我可以实例化的"类"定义吗?例如,如果我需要将选项传递给构造函数,该怎么办?

Nik*_*los 9

Angular中的DI是否只适用于某些angular.module上定义的"对象"(工厂,服务,模型)?

是.该模块实际上是服务等的包装器.

我可以依赖一些外部库,比如使用DI的jQuery吗?

是的,我们这样做:myModule.constant("jQuery", window.$).

每次都是一个新实例,还是一个单例?

总是单身,除了$scope.此外,控制器全部被重新实例化(但控制器功能当然仍然是单例).

它可以通过我可以实例化的"类"定义吗?

当然是.只需从定义函数返回构造函数,例如:(编辑:这必须与factory;使用service将实例化MyClass并使用实例作为服务值)

factory("Xxx", function(dep1, dep2) {
    function MyClass() {
        ...
    }

    MyClass.prototype.method = function() ...

    return MyClass;
});
Run Code Online (Sandbox Code Playgroud)

这也是你可以用RequireJS做的.


至于与RequireJS的区别:我可以确定的一点是,RequireJS包含一个脚本加载器以及一个DI框架(以及优化器).所以Require(AMD)模块与脚本文件有1-1关系.另一方面,Angular模块和服务与文件没有必需的关系.

除此之外,它们看起来与我相似.