【发布时间】:2018-09-14 13:13:08
【问题描述】:
我正在运行一些初始化代码以在 run() 块中填充我的初始应用程序状态。初始应用程序状态需要一个 HTTP 调用来获取一些数据来填充状态,但是,运行块在 HTTP 承诺解决之前执行并引导应用程序,因此我的初始页面状态在页面显示时实际上并没有填充。
如何在启动应用程序之前“等待”状态初始化?
const Run = (StoreService, ContentService) => {
'ngInject';
let appState = StoreService.getState();
// Initialise Application State
if (!appState) {
const initialState = {
$valid: {},
labels: []
};
// THIS METHOD NEEDS TO RESOLVE BEFORE THE APPLICATION IS BOOTSTRAPPED
ContentService.getAllContent()
.then(data => {
StoreService.setState({
...initialState,
labels: data
});
console.log('Content Saved');
})
.catch(err => {
console.log(err);
});
}
angular.module('app').run(Run);
angular.bootstrap(document.getElementById('app'), ['app'], {
strictDi: true
});
【问题讨论】:
-
请准确解释你想要什么。如果在任何角度 (medium.com/@thatisuday/…) 之前运行 http,或者您很乐意在调用之前初始化服务,但您希望在控制器初始化之前调用 http?
-
后者。我需要在主控制器运行之前初始化状态,以便控制器中可以使用完整的状态。
-
我个人更喜欢创建路由状态,任何其他状态都可以扩展并调用它们 - 这样我就可以完全控制,即可以在请求进行时显示一些漂亮的加载。
-
你有一个例子说明你是如何做到的吗?
标签: javascript angularjs asynchronous promise