我创建了一个服务,该服务将运行已请求的所有http请求。它运行在ui-router的onSuccess挂钩中,如下所示:
<div :class="formGroupClass">
<label for="mobile" v-bind:class="{'text-danger': errors.has('mobile')}">Mobile</label>
<input type="text" v-validate="validation.mobile" class="form-control" v-model="user.mobile" name="mobile" id="mobile" />
<span class="invalid-feedback">{{ errors.first('mobile') }}</span>
</div>
此问题是控制器在此钩子之后初始化,因此我无法在不添加超时的情况下捕获http请求:
$transitions.onSuccess({}, function() {
document.body.scrollTop = document.documentElement.scrollTop = 0;
console.log('%cwe have completed a transition', 'color: green;');
httpQueueService.process();
});
我知道超时只有半秒,我甚至可以进一步减少超时,但这似乎不对。 如果我可以直接从成功挂钩中获取已初始化的控制器,那就更好了。
有没有办法做到这一点?
我确实通过查看成功挂钩中的过渡对象来进行尝试:
function process() {
$timeout(() => {
let t = angular.copy(queue);
console.log('processing', t, t.length);
queue.forEach((task) => invoke(task));
}, 500);
}
但这似乎没有控制器在其中
答案 0 :(得分:1)
您要查找的是ui路由器状态的“解决”选项。如果我正确理解了您的描述,您正在尝试将数据(从httpQueueService)异步加载到新状态的控制器。我建议您看看官方的ui-router文档,尤其是教程。显然,您可以跳过大部分内容,因此从第二个开始:https://ui-router.github.io/ng1/tutorial/hellosolarsystem对您来说似乎是可行的。
基本上,它处理您正在执行的操作的异步特性-无需添加任何确切的硬编码超时。
这是另一篇很棒的文章,我发现在过渡时处理异步查询很有帮助:https://medium.com/opinionated-angularjs/advanced-routing-and-resolves-a2fcbf874a1c
我希望这会有所帮助,但是,如果您还有其他更具体的问题,请告诉我们!