我有一个UI-Router
网站,其中包含以下状态:
$stateProvider
.state('order', {
url: '/order/:serviceId',
abstract:true,
controller: 'OrderController'
})
.state('order.index', {
url:'',
controller: 'order-IndexController'
})
.state('order.settings', {
url:'',
controller: 'order-SettingsController'
})
我的两个州没有设置网址,这意味着只有通过与应用程序的交互才能访问它们。但是,默认情况下会自动加载order.index
状态,因为我已经定义了状态。
我注意到尝试ui-sref="^.order.settings"
或$state.go("^.order.settings")
然后ui-router
首先导航到order.settings
状态,然后立即导航到order.index
state(默认状态)。我认为这种情况正在发生,因为网址更改会导致第二次导航,而且两者都state.url == ''
后,它会自动默认为order.index
状态......
我通过在{location: false}
中设置$state.go('^order.settings', null, {location:false})
对象对此进行了测试。这导致加载正确的状态(order.settings),但url没有改变。因此,我认为网址更改会触发第二次导航。
答案 0 :(得分:1)
我明白,可以想象,你不喜欢我的答案,但是:
请勿使用具有相同网址定义的两个非抽象状态
这不是预期的,因此几乎不受支持:
.state('order.index', {
url:'', // the same url ...
...
})
.state('order.settings', {
url:'', // .. used twice
...
})
虽然UI-Router
确实根本不需要网址定义(请参阅How not to change url when show 404 error page with ui-router),但这并不意味着2个网址可以定义相同。在这种情况下,除非使用某些特殊操作,否则将始终评估第一个...
我强烈要求,提供(非默认)状态之一以及一些特殊的 url
.state('order.settings', {
url:'/settings', // ALWAYS clearly defined
...
})