在routeProvider
中,如果我们提供包含承诺的解析对象,我们可以保留routing
;它会等到所有的承诺都解决了。但是,我无法在应用程序的初始化中找到方法。
有angular.module("app", []).run(function (){ //init app })
但是对于$resource
或$http
是异步的,应用可以在解析依赖关系(promises)之前完成初始化,从而创建race condition
。我们不希望这样。
所以问题是,有没有一种方法可以保持service
的初始化,直到所有给定的承诺得到解决?
答案 0 :(得分:5)
我见过类似的问题。团队伙伴采用的优雅解决方案是与RequireJS和domReady模块的组合:
define(['require', 'angular', 'app','routes', 'pendingServices'],
function (require, ng, app, pendingServices) {
/* place operations that need to initialize prior to app start here
* using the `run` function on the top-level module
*/
app.run(pendingServices.init)
require(['domReady!'], function (document) {
/* everything is loaded...go! */
ng.bootstrap(document, ['mainModule']);
});
});
在init方法中,您可以执行所有预加载(并等待所需的promise)。我当然有兴趣听其他解决方案。
答案 1 :(得分:1)
只是在这里考虑一下,但是只宣告1'赶上所有'要开始的路线,并在该路线提供者中,保持路线的加载,直到您完成所需的一切。 (使用决心和承诺)。
然后,当您完成后,注册其余路线,然后重新加载原始路线。这一次,应该注册一个更具体的处理程序,它将绕过你的所有'初始化。
您如何看待,有什么问题吗?