Vue.js组件导航活动类仅适用于第二次单击

时间:2018-06-11 17:01:35

标签: javascript vue.js routing vue-component vue-router

我有一个位于视图中的菜单组件,该视图由其自己的路径(/ how-it-works)访问。在这个视图中,我正在加载头部组件,如下所示:

<nav class="nav">
    <ul class="top-menu">
        <li v-for="menu in menuItems" v-bind:key="menu.id" v-bind:class="{'active' : menu.active}" v-on:click="setActiveMenu(menu)">
            <router-link :to="menu.url">{{ menu.name }}</router-link>
        </li>
    </ul>
    <div class="get-started">
        <router-link to="/">Get Started</router-link>
    </div>
</nav>

问题在于,无论何时访问此路线,我都可以验证menu.active是否为真,但active类未被触发。但是,如果我已经在/它是如何工作的路线,那么它应该工作,但只适用于该路线。它似乎无法跨越路线导航。 setActiveMenu函数如下所示:

setActiveMenu: function(menu) {
    for (let i = 0; i < this.menuItems.length; i++) {
        this.menuItems[i].active = false;
    }
    menu.active = true;
}

最后,菜单数组如下所示:

menuItems: [
    {
        name: 'How It Works',
        url: '/how-it-works',
        id: 1,
        active: false
    },
    {
        name: 'Page 2',
        url: '/',
        id: 2,
        active: false
    },
    {
        name: 'Page 3',
        url: '/',
        id: 3,
        active: false
    },
    {
        name: 'Page 4',
        url: '/',
        id: 4,
        active: false
    },
    {
        name: 'Page 5',
        url: '/',
        id: 5,
        active: false
    },
    {
        name: 'Page 6',
        url: '/',
        id: 6,
        active: false
    }
]

我猜测我的问题或者是我如何处理组件创建时的活动状态,或者是在路由之间导航的一些问题。操纵标题的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

刚想出来..我没有添加点击事件,而是使用了vue.js中内置的created方法:

created() {
    for (let i = 0; i < this.menuItems.length; i++) {
        this.menuItems[i].active = false;
        if (this.menuItems[i].url === this.$router.currentRoute.path) {
            this.menuItems[i].active = true;
        }
    }
}

我仍然想知道这是否是最好的方法呢?