ui-router导航在某些条件下发生两次

时间:2014-11-20 02:05:32

标签: angularjs angular-ui-router

我有一个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没有改变。因此,我认为网址更改会触发第二次导航。

1 个答案:

答案 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
    ...
})