Javascript AngularJS中的依赖注入是否只适用于AngularJS;对象;?

Javascript AngularJS中的依赖注入是否只适用于AngularJS;对象;?,javascript,angularjs,dependency-injection,requirejs,Javascript,Angularjs,Dependency Injection,Requirejs,我刚开始学习AngularJS,我正试着把我的头脑集中在依赖注入上。 具体来说,我试图理解DI和使用RequireJS声明依赖项之间的区别 Angular中的DI是否仅适用于某些Angular.module上定义的“对象”(工厂、服务、模型)?例如,我可以依赖一些外部库,比如使用DI的jQuery吗 一般来说,RequireJS中的依赖关系管理和Angular中的DI之间的区别可以这样表述: RequireJS只在第一次需要时处理加载依赖项(延迟加载),并确保在执行之前存在所有依赖项,而Angu

我刚开始学习AngularJS,我正试着把我的头脑集中在依赖注入上。 具体来说,我试图理解DI和使用RequireJS声明依赖项之间的区别

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

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

RequireJS只在第一次需要时处理加载依赖项(延迟加载),并确保在执行之前存在所有依赖项,而Angular DI允许在运行时轻松更改依赖项,只要其接口保持不变

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

Angular中的DI是否仅适用于某些Angular.module上定义的“对象”(工厂、服务、模型)

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

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

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

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

除了
$scope
,所有方式都是单例。此外,控制器总是被重新实例化(但控制器函数仍然是一个单例函数)

它能传递一个我可以自己实例化的“类”定义吗

当然可以。只需从定义函数返回构造函数,例如:(编辑:这必须与
工厂
一起使用;使用
服务
将实例化
MyClass
并使用实例作为服务值)

这也是你可以用RequireJS做的


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

除此之外,他们看起来很像我

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

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

    return MyClass;
});