vuejs this.$route 地址栏问题

Posted

技术标签:

【中文标题】vuejs this.$route 地址栏问题【英文标题】:vuejs this.$route issue with address bar 【发布时间】:2018-07-31 01:24:31 【问题描述】:

当我删除一个参数时,它不会在地址栏中生效。 我尝试以下行从 URL 中删除参数。

delete this.$route.query[parameter_name];

见下面的网址,注意以下事项。

    在控制台查询对象为空,但地址栏包含所有参数。

    我尝试了以下几行来从 URL 中删除申请者和分支参数。它仅在控制台中生效,因为您可以看到查询对象为空但 URL 仍然存在。

delete this.$route.query['applicants'];

delete this.$route.query['branches'];

但地址栏仍然有所有已删除的参数。

donate#/?applicants=Female&branches=2207962

【问题讨论】:

【参考方案1】:

这将与$router.push$router.replace 一起使用以清除查询字符串。

清除组件生命周期挂钩内的查询字符串。

mounted() 
  this.$router.replace( query:  '': null  );

清除重定向时的查询字符串。

$router.push( path: 'url-path', query:  '': null  )
$router.replace( path: 'url-path', query:  '': null  )

删除旧查询字符串值并替换为新值。

$router.push(path: 'url-path', query: '': null, lastname: 'Ever', firstname: 'Greatest')
$router.replace( path: 'url-path', query:  '': null  token: 'coolToken' )

【讨论】:

【参考方案2】:

使用delete 将删除属性但不会更新地址栏。 您需要以编程方式指定重定向。见Programmatic Navigation。

你可以使用

this.$router.push('donate')

或者

this.$router.replace('donate')

替换当前的历史记录(参见@thanksd 的评论)

【讨论】:

我会使用this.$router.replace( query: ) 谢谢,我在答案中添加了replace 很好@Thanksd,我明白了。但是我有案例,我在地址栏中有 3 个参数,我想删除其中的 1 个并想保留另外 2 个。我该如何推送或替换为其他 2? 当我尝试 this.$router.push(path:'donate',query: filterObj); 它工作正常但地址看起来很糟糕http://project.seedout/donate#/donate?branches=2196379 捐赠应该只有一次。 用斜线试试:this.$router.push( path: '/donate', query: filterObj )

以上是关于vuejs this.$route 地址栏问题的主要内容,如果未能解决你的问题,请参考以下文章

改变this.$route.query中的数据

vue实时获取路由地址

vuejs 路由器 - this.$route 在刷新时始终为空

.net mvc 路由机制和地址栏重写

Vuejs,当我在商店模块中访问它时,为啥 this.$store.state.route.params.activityId 未定义

vue路由传参query和params的区别