gpt4 book ai didi

javascript - 为什么我的 $state.go 只能在 setTimeout 内工作?

转载 作者:行者123 更新时间:2023-11-28 12:27:09 24 4
gpt4 key购买 nike

当用户输入 /general 时,我需要重定向用户至/boards 。我正在使用$state.go('boards')来实现这一点,但只有当我将它包装在 setTimeout 中时它才有效。即使没有延迟也能正常工作。为什么会出现这种行为?

App.randomModule = angular.module('App.randomModule', ['ngRoute', 'ui.router'])
.config(function ($stateProvider){
$stateProvider
.state('general', {
url: '/general',
resolve: {
redirect: function ($state){

// Working
window.setTimeout(function(){
$state.go('boards');
}, 0); // Note there's no delay

// Not working
$state.go('boards');
}
}
})
});

最佳答案

setTimeout(function(){}, 0) 在下一个时钟周期内执行该函数。并且除非您执行其他操作,否则不会调用您的resolve:redirect。

因此,当您处于当前循环中时,您告诉 ui-router:$go('/general') - 所以现在需要转到常规。但它不会立即执行此操作,因为它有一个 resolve()!首先它尝试解析 redirect 对象,然后执行它的' $go('/general');

因此,您在摘要周期中积累了一些更改:- 创建解析对象(也许你在那里返回一个 promise ,也许一个值,也许未定义,没关系)- $state.go('/board')- $state.go('/general')

并且(这里假设),Angular 将看到它在摘要周期中发生变化,并且它会看到即使您调用解析,它也不是要放置的最后一个 URL,并且它会被覆盖。

但是,当您使用 setTimeout() 时,您的 go('board') 会在摘要循环之后被调用,因此它 执行。

顺便说一句,您可能最好使用 $timeout 而不是 setTimeout 。

关于javascript - 为什么我的 $state.go 只能在 setTimeout 内工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27003357/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com