感谢Dan Wahlin 的精彩文章,我设法实现了 Angular 控制器和服务的延迟加载。但是,似乎没有一种干净的方法来延迟加载独立模块。
为了更好地解释我的问题,假设我有一个没有 RequireJS 的应用程序的结构如下:
// Create independent module 'dataServices' module with 'Pictures' object
angular.module("dataServices", []).factory("Pictures", function (...) {...});
// Create 'webapp' ng-app, with dependency to 'dataServices', defining controllers
angular.module("webapp", ['dataServices'])
.controller("View1Controller", function (...) {...})
.controller("View2Controller", function (...) {...});
这是 Plunker 中带有 RequireJS 的示例应用程序:http:
//plnkr.co/aiarzVpMJchYPjFRrkwn
问题的核心是 Angular 不允许ng-app
在实例化后添加依赖项。因此,我的解决方案是用于angular.injector
检索Picture
要在我的View2Controller
. 见js/scripts/controllers/ctrl2.js
文件。
这给我带来了两个问题:
- 注入的服务在 Angular 之外运行,因此所有异步调用都必须以 $scope.$apply() 结尾
- 凌乱的代码,其中一些对象可以使用标准的角度语法注入,而另一些则需要显式使用注入器。
你们有谁知道如何使用 RequireJS 延迟加载独立模块,并以某种方式将这个模块挂接到角度,以便可以使用正常的角度依赖注入语法?
注意:
问题是关于独立模块的延迟加载。这个特定示例的一个简单解决方案是在期间使用缓存的 $providers 创建“图片”对象,ng-app.config
但这不是我想要的。我正在寻找适用于 3rd 方模块的解决方案,例如angular-resource
.