home页面有2个子路由list和user
<template> <div class="home"> <router-view/> <router-link to="/home/list">新闻列表</router-link> <router-link to="/home/user">个人中心</router-link> </div> </template>路由处设置home的2个子路由
routes: [ { path: '/', name: 'login', component: Login }, { path: '/home', name: 'home', component: Home, children: [ { path: 'list', name: 'list', component: () => import(/* webpackChunkName: "list" */ './views/List.vue') }, { path: 'user', name: 'user', component: () => import(/* webpackChunkName: "user" */ './views/User.vue') } ] } ]当点击登录按钮后,会跳转到home下的list页面
<template> <div class="login"> <button @click="reg">登录</button> <button>注册</button> </div> </template> <script> export default { methods: { reg () { this.$router.push('/home/list') } } } </script>Vuex应用
使用Add.vue组件添加的内容会在List.vue中显示,store.js中写入
import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) export default new Vuex.Store({ state: { lists: [] }, mutations: { addItem (state, value) { state.lists.push(value) } }, actions: {} })当点击添加按钮时,触发定义在store.js中的addItem方法,这个方法需要一个value,使用对象提供,所以在Add.vue写入
<template> <div class="add"> <p>标题</p><input type="text" v-model="title"> <p>内容</p><input type="text" v-model="content"> <div class="btn" @click="add">添加</div> </div> </template> <script> import store from '@/store' export default { store, data () { return { title: '', content: '' } }, methods: { add () { store.commit('addItem', { title: this.title, content: this.content }) this.$router.push('/home/list') } } } </script>在List.vue中更新lists数据,需要监听lists的变化,所以要写在计算方法内
<template> <div class="list"> <ul> <li v-for="(item,index) of lists" :key="index">{{item.title}}-{{item.content}}</li> </ul> </div> </template> <script> import store from '@/store' export default { store, computed: { lists () { return store.state.lists } } } </script>