gpt4 book ai didi

Angularjs ui-router 解析调用两次

转载 作者:行者123 更新时间:2023-12-02 18:35:19 26 4
gpt4 key购买 nike

在过去的几个小时里,这让我发疯,但我仍然找不到解决方案......

基本上,当解析返回 http 404 状态代码时,我会将状态更改为 404。我正在更改 $stateChangeError 事件中的状态。一切正常,除了在状态更改为 404 后,它会启动另一次状态更改回原始状态,从而解析两次。状态本身保留在 404 上,因此它毕竟可以工作,但它仍然会发出不需要的额外 $http 请求。但是,只有当我使用 $state.go('404', null, { location: false }) 或者 404 状态没有时,它才会像这样工作完全定义的 URL。

如果我为 404 状态 (/404) 定义了一个 URL,那么一切都会正常工作。

这里有 2 支笔,演示了这个问题:

失败的:http://codepen.io/cprfnaporf/pen/RaqmQN ( Debug模式,查看控制台:http://s.codepen.io/cprfnaporf/debug/RaqmQN/)

工作中:http://codepen.io/cprfnaporf/pen/MyzdVQ ( Debug模式,查看控制台:http://s.codepen.io/cprfnaporf/debug/MyzdVQ/)

知道如何解决这个问题吗?我真的没主意了。

谢谢!

最佳答案

对我来说,您已经找到了解决方案。事实上,正如您的代码中所述:

$urlRouterProvider.when('/', '/profile/x/details');

默认网址为/profile/x/details。当 ui-router 看到该 url,它将尝试加载状态层次结构:basebase.profilebase.profile.details。正如您所说,最后一个不会被加载,因为您捕获了 404 错误并将请求重定向到其他地方。

问题是您仍然位于 /profile/x/details。因此,在 stateChangeError 中,当您执行 $state.go('404', null, { location: false }); 时,ui-router 将检查 url。

由于 404 中未设置,因此他将采用他拥有的:/profile/x/details。这就是为什么他解析相同的状态层次结构:basebase.profilebase.profile.details

关于Angularjs ui-router 解析调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37010358/

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