AngularJs ui-router success transition get controller

AngularJs ui-router success transition get the controller

我已经创建了一个服务,可以运行 请求任何 http 请求。这个 运行s 在 ui-router onSuccess 挂钩中,看起来像这样:

$transitions.onSuccess({}, function() {
    document.body.scrollTop = document.documentElement.scrollTop = 0;
    console.log('%cwe have completed a transition', 'color: green;');
    httpQueueService.process();
});

这个问题是控制器在这个钩子之后初始化,所以我无法在不添加超时的情况下捕获 http 请求:

function process() {
    $timeout(() => {
        let t = angular.copy(queue);
        console.log('processing', t, t.length);
        queue.forEach((task) => invoke(task));
    }, 500);
}

我知道超时只有半秒,我可能会进一步减少它,但这似乎不对。 如果能直接从success hook中获取已经初始化好的controller就更好了

有办法吗?

我确实通过查看成功挂钩中的转换对象进行了尝试:

$transitions.onSuccess({}, function(transition) {
    console.log(transition);
});

但是那里似乎没有控制器

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

基本上它处理您正在做的事情的异步性质 - 没有添加任何确切的 hard-coded 超时。

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

希望这对您有所帮助,但是,如果您有任何更具体的问题,请告诉我们!