vue-router与不同param相同的路由

时间:2017-08-01 08:03:10

标签: vue.js vue-router

我在/entries/12路线上。在同一个组件上,我想在用户点击下一个按钮时按/entries/13

代码就像:

//e is the next page number. 
 this.$router.push({ name: 'Entries', params: { pageNum: e }});

我得到以下错误:

enter image description here

如果我尝试不同的路线。

整个代码:

<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);
}

3 个答案:

答案 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 }});