Angular UI-Router重新加载时重置查询字符串参数

8

我当前的状态是这样的:

.state('test-event-list', {
    parent: 'private',
    url: '/test-events?search&sortc&sortd&pagesize&page&select&status',
    reloadOnSearch: false,
    views: {
        'view@body': {
            templateUrl: 'app/config-test/test-event/list.html',
            controller: require('./config-test/test-event/list')
        }
    },
    data: {
        auth: true
    }
})

我将使用$location.search()来设置不同的参数,例如排序、列表大小和列表页码在查询字符串中。

例如,URL可能会像这样:

/test-events?pagesize=25&page=1

我有一个菜单,其中包含以下链接以选择测试事件列表:

<a ui-sref="test-event-list" ui-sref-opts="{reload: true, inherit: false}">Tests</a>

在状态“test-event-list”下,点击这个链接,它可以重置列表的参数并重新加载页面,但它没有删除查询字符串中的参数。如何从URL中删除”?pagesize=25&page=1”呢?ui-router提供的“inherit”标志似乎没有什么作用。我正在使用ui-router的最新版本(0.2.15)。

1
你能提供一个包含这种行为的 Plunker 吗?我真的很想看看我们如何解决这个问题。 - Okazari
@Okazari我宁愿不单独设置它们,因为如果参数被更改,我将不得不返回并重新做所有菜单项。我会尝试为您获取一个plunker - Xander
这是真的,对于代码可维护性来说那不是一个好主意。 - Okazari
@Okazari 我尝试将它们设置为null,但没有起作用。我想我也曾经尝试过这样做。由于它们是查询字符串参数而不是状态参数,因此无论如何都不会起作用。 - Xander
似乎reloadOnSearch:false会破坏一些东西,如在这个问题https://github.com/angular-ui/ui-router/issues/677中所述。 - rave
显示剩余2条评论
2个回答

7
你可以尝试前往:
<a ui-sref="test-event-list({})" ui-sref-opts="{reload: true, inherit: false}">Tests</a>

因为查询字符串参数不是必须的


谢谢你的建议,rave,但我已经尝试过了,可惜没有成功。查询字符串仍然存在于URL中。 - Xander
1
感谢rave,这对我确实有用。angular v1.3.14 + ui-router v0.2.15 - Sephy

3

我曾经遇到过同样的问题,只想从URL末尾删除查询。通过为每个参数传递一个空字符串,我能够删除查询。对于你来说,它看起来应该像这样。

<a ui-sref="test-event-list({ pagesize: '', page: '' })">Tests</a>

对我来说有所不同。我不需要传递当前路由的名称。
<a ui-sref="{ date: '' }">all logs</a>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接