在我的一个应用程序中,我想使用 $resource 来清理读/写操作,但是 url 有一个前缀,在我完成加载首选项文档之前我无法知道。我不知道如何完全延迟工厂创建,直到 ajax 返回。
这类似于“在一些 ajax 数据返回之前不要初始化应用程序”问题,但我能找到的所有示例(使用 $route.resolve
)仅延迟 Controller ,而不是工厂。
这是我的理想jsFiddle .
我认为 GitHub pull #3295可能只是神奇地使上面的 fiddle 起作用,但我正在寻找替代方案,直到它被合并。
我当前的修复是 here ,但这会导致多个 $resource
实例,以及每个需要工厂或首选项文档的路由的 resolve
子句。
最佳答案
注入(inject) Angular Ui Router,并将您的 Doc 重构为提供者工厂而不是服务工厂
fiddle :http://jsfiddle.net/LongLiveCHIEF/5kSbC/
- 将您的工厂更改为提供商(仍然使用
.factory
方法),并使用 ui.router 处理您的 prefs 服务进行路由前解析。 - 然后,您的 prefs 将配置您以前的
docs
工厂(现在重构为提供者)的prefix
,然后再将路由器发送到您的应用程序或激活一个应用状态。 - 然后在 Controller 实例化之前通过异步 promise 解析解析 Doc 工厂数据。
然后这将自动使数据可用于 $state
(ui.router)
ui.router中的.when()
允许您匹配路由模式,然后在触发路由处理之前进行一些特殊配置。事实上,我昨晚只是发布了一个小应用程序,它有一个类似的挑战需要解决(我需要在初始化应用程序或处理路线之前用一些用户特定的信息来为 View 播种)。你可以在这里看到我的实际代码:
https://github.com/NormalGravity/evsvillas.com/blob/master/app/src/app.js .
查看第 22-38 行。在决定将什么路由发送到应用程序之前,他们等待解决 promise (它为单例播种配置数据)。
一些有用的阅读:
- AngularJS 开发人员指南 Providers和 Services (注意不同应用阶段的可用性)。这实际上不是你想的那样。这两个指南讨论了如何以不同的方式和应用程序阶段使用
factory
、service
和provider
将它们变成服务或提供者(想想$http
与$httpProvider
) - Angular Ui 路由器 wiki Page on the StateManger .这详细说明了允许预路由工厂配置的概念
关于javascript - 创建工厂时使用异步数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21804685/