Angular UI路由器在URL更改时不会获得查询参数

时间:2014-07-16 16:59:57

标签: javascript angularjs angular-ui-router

我的收藏页面左侧有导航,右侧有一堆记录。每个导航项对应一条记录。我希望用户能够单击左侧的导航项,然后滚动到该记录。此外,导航项目和记录应该被选中'状态。

URL / stuff / 4?selectedRecord = 5应该获取集合ID 4的所有记录并选择记录nummer 5.

我在导航/录制项目和下面的州提供商处使用ui-sref。当我点击导航项时,网址和状态会发生变化。

但是当我将网址从/ stuff / 4?selectedRecord = 5更改为/ stuff / 4?selectedRecord = 6时,没有任何反应。没有$ stateChangeStart被解雇......

$stateProvider

    // The stuff index: /stuff
    .state('stuff', {
        url: '/stuff',
        abstract : true,
        templateUrl: 'app/stuff/stuff.html' // wrapper
    })

    // Stuff detail page.
    .state('stuff.detail', {
        url: '/{stuffId}',
        templateUrl: 'app/stuff/stuff.detail.html',
        controller: 'StuffDetailController'
    })

    // Stuff detail page with a record selected
    .state('stuff.detail.selectedRecord', {
        url: '?selectedRecord'
    })

这是我的sref导航项,有效:

<li ui-sref="stuff.detail.selectedRecord({selectedRecord:record.id})"
        ui-sref-active="selected">Works</li>

修改:如果我将selectedRecord的网址更改为:

,则完全相同的代码有效
url: '/select/:selectedRecord'

1 个答案:

答案 0 :(得分:2)

这里的问题是,在开头用问号定义的网址url: '?selectedRecord'是正则表达式的最弱选择...所以,如果您可以使用网址,例如像这样:

- /stuff/4/?selectedRecord=5  // see the '/' before '?'
- /stuff/4/?selectedRecord=6
一切都会奏效。事实上,可能有任何事情,只是为了帮助区分先前的网址部分url: '/{stuffId}'已经被评估过。

在此plunker中,此更新后的网址定义为:

.state('stuff.detail.selectedRecord', {
        url: '/?selectedRecord', // the ? is preceeding with /
        ...
    })

实际上可能存在任何其他字符或组合......只是为了帮助找到子状态URL的起始位置。 (可以玩here