我在/entries/12
路线上。在同一个组件上,我想在用户点击下一个按钮时按/entries/13
。
代码就像:
//e is the next page number.
this.$router.push({ name: 'Entries', params: { pageNum: e }});
我得到以下错误:
如果我尝试不同的路线。
整个代码:
<template>
<div class="entries">
<generic-entries @clicked="clicked" ></generic-entries>
</div>
</template>
<script>
import GenericEntriesComp from '@/components/GenericEntriesComp';
export default{
name: 'entries-comp',
components: {genericEntries: GenericEntriesComp},
mounted(){
var params = {id : this.$route.params.pageNum}
this.$store.dispatch("getEntries",params);
},
methods: {
clicked(e){
this.$router.push({ name: 'Entries', params: { pageNum: e.toString() }});
},
loadData(){
var params = {pageNum : this.$route.params.pageNum}
this.$store.dispatch("getEntries", params)
}
},
computed: {
items(){
return this.$store.state.entries
},
},
watch: {
'$route': 'loadData'
}
}
</script>
错误来自:
Vue.config.errorHandler = function (err, vm, info) {
console.error(err);
}
答案 0 :(得分:1)
找到答案。
似乎vue-router
按预期工作。在我的情况下还有另一个问题。
如果我在通用组件中也有下面的代码,我会认为它循环并产生错误。
watch: {
'$route': function(){
this.loadData();
}
}
在我的情况下,我从通用组件中删除了观察者并且它有效。
答案 1 :(得分:1)
我用:key解决了我的问题。这样,我保证只要更改$ route,所有路由器视图的内容都将重新呈现。
<router-view :key="$route.fullPath" @showLoading="showLoading"></router-view>
答案 2 :(得分:0)
如果您决定以编程方式更改route参数,则应使用replace
而不是push
,如下所示:
//e is the next page number.
this.$router.replace({ name: 'Entries', params: { pageNum: e }});