AngularJs ui路由器成功过渡获取控制器

时间:2019-07-05 09:50:56

标签: angularjs angular-ui-router

我创建了一个服务,该服务将运行已请求的所有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);
}

但这似乎没有控制器在其中

1 个答案:

答案 0 :(得分:1)

您要查找的是ui路由器状态的“解决”选项。如果我正确理解了您的描述,您正在尝试将数据(从httpQueueService)异步加载到新状态的控制器。我建议您看看官方的ui-router文档,尤其是教程。显然,您可以跳过大部分内容,因此从第二个开始:https://ui-router.github.io/ng1/tutorial/hellosolarsystem对您来说似乎是可行的。

基本上,它处理您正在执行的操作的异步特性-无需添加任何确切的硬编码超时。

这是另一篇很棒的文章,我发现在过渡时处理异步查询很有帮助:https://medium.com/opinionated-angularjs/advanced-routing-and-resolves-a2fcbf874a1c

我希望这会有所帮助,但是,如果您还有其他更具体的问题,请告诉我们!