我试图用Vue-router在改变输入字段时设置查询参数,我不想导航到其他页面,但只想修改url查询参数在同一页面上,我这样做:
this.$router.replace({ query: { q1: "q1" } })
但这也会刷新页面并将y位置设置为0,即滚动到页面顶部。这是设置URL查询参数的正确方法还是有更好的方法。
编辑:
这是我的路由器代码:
export default new Router({
mode: 'history',
scrollBehavior: (to, from, savedPosition) => {
if (to.hash) {
return {selector: to.hash}
} else {
return {x: 0, y: 0}
}
},
routes: [
.......
{ path: '/user/:id', component: UserView },
]
})
好吧,所以我一直试图添加一个参数到我现有的url wich已经有一个星期的params现在lol,
原始网址:http://localhost:3000/somelink?param1=test1
我一直在尝试:
this.$router.push({path: this.$route.path, query: {param2: test2} });
这段代码只是删除param1并变成
http://localhost:3000/somelink?param2=test2
为了解决这个问题,我使用了fullPath
this.$router.push({path: this.$route.fullPath, query: {param2: test2} });
现在我成功地在旧的参数和结果添加参数
http://localhost:3000/somelink?param1=test1¶m2=test2
为了一次设置/删除多个查询参数,我最终使用了以下方法作为全局mixins的一部分(这指向vue组件):
setQuery(query){
let obj = Object.assign({}, this.$route.query);
Object.keys(query).forEach(key => {
let value = query[key];
if(value){
obj[key] = value
} else {
delete obj[key]
}
})
this.$router.replace({
...this.$router.currentRoute,
query: obj
})
},
removeQuery(queryNameArray){
let obj = {}
queryNameArray.forEach(key => {
obj[key] = null
})
this.setQuery(obj)
},