Angular ui-router解析两次

And*_*rew 9 angularjs angular-ui-router

这让我在过去几个小时里疯狂,我仍然无法找到解决方案......

基本上我将状态更改为何404时解析返回http 404状态代码.我正在改变状态$stateChangeError.一切正常,除非状态改变后,404它开始另一个状态改变回原来的状态,从而解决两次.状态本身仍然存在404,所以它毕竟是有效的,但它仍然会产生$http不需要的额外请求.但是,如果我使用$state.go('404', null, { location: false })OR,如果404状态根本没有定义URL ,它只会像这样工作.

如果我为404state(/404)定义了一个url ,那么一切正常.

这是2支钢笔,展示了这个问题:

失败的一个:http://codepen.io/cprfnaporf/pen/RaqmQN(调试模式,检查控制台:http://s.codepen.io/cprfnaporf/debug/RaqmQN/)

工作原理:http://codepen.io/cprfnaporf/pen/MyzdVQ(调试模式,检查控制台:http://s.codepen.io/cprfnaporf/debug/MyzdVQ/)

知道如何解决这个问题吗?我真的没有想法.

谢谢!

Zak*_*ria 4

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

$urlRouterProvider.when('/', '/profile/x/details');
Run Code Online (Sandbox Code Playgroud)

默认网址是/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.profileet base.profile.details