ela*_*anh 3 javascript dependency-injection requirejs angularjs
我开始使用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.此外,控制器全部被重新实例化(但控制器功能当然仍然是单例).
它可以通过我可以实例化的"类"定义吗?
当然是.只需从定义函数返回构造函数,例如:(编辑:这必须与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模块和服务与文件没有必需的关系.
除此之外,它们看起来与我相似.
| 归档时间: |
|
| 查看次数: |
2209 次 |
| 最近记录: |