基本上我在解析返回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(调试模式,检查控制台:http://s.codepen.io/cprfnaporf/debug/RaqmQN/)
工作日期:http://codepen.io/cprfnaporf/pen/MyzdVQ(调试模式,检查控制台:http://s.codepen.io/cprfnaporf/debug/MyzdVQ/)
知道如何解决这个问题吗?我真的没有想法.
谢谢!
的确,如您的代码中所述:
$urlRouterProvider.when('/','/profile/x/details');
默认网址是/ profile / x / details.当ui-router看到
该url,它将尝试加载状态层次结构:base,base.profile和base.profile.details.正如您所说,由于您捕获404错误并将请求重定向到其他位置,因此不会加载最后一个.
问题是您仍然位于/ profile / x / details.所以在stateChangeError中,当你执行$state.go(‘404’,{location:false});时,ui-router将检查url.
由于它没有在404中设置,他将采用他拥有的那个:/ profile / x / details.这就是他解决相同状态层次结构的原因:base,base.profile et base.profile.details.