背景
将vue-router和vuex进行整理,以便于查阅和加深记忆。
Vue-router
安装
- npm install vue-router
导入路由
- import VueRouter from ‘vue-router’
配置路由
const routes=[
//点击主页展示home组件内容
{path:'/',component:Home},
{path:'/menu',component:Menu},
]
//实例化一个router
const router=new VueRouter({
routes,
mode:'history'
})
在vue实例中引用一下
new Vue({
el: '#app',
router,
})
标签
- 页面无刷新路由跳转需使用router-link,
- 默认是a标签
- 使用tag=””可以指定标签
- <router-link to=”/”>常峻</router-link>
- 跳转到上一次浏览的页面
- this.$router.go(-1)
二级路由
//childern属性下面写配置
{
path: '/about', name: "aboutLink", redirect: '/about/contact', component: About, children: [
{
path: '/about/contact', name: "contactLink", redirect: '/person', component: Contact, children: [
{path: '/phone', name: "phoneLink", component: PhoneNumber},
{path: '/person', name: "personLink", component: PesonName},
]
},
{path: '/history', name: "historyLink", component: History},
{path: '/orderingGuide', name: "orderingGuideLink", component: OrderingGuide},
{path: '/delivery', name: "deliveryLink", component: Delivery},
]
},
router-view复用
//添加name属性,在路由中定义多个组件
components: {
default:Home,//设置默认Home组件
'orderingGuide':OrderingGuide,
'delivery':Delivery,
'history':History
}
全局导航守卫
router.beforeEach((to, from, next) => {
// 此处写条件
//to:即将要进入的路由目标对象
//from:当前导航正离开的路由
//next:调用的方法
})
组件内的守卫
beforeRouteEnter (to, from, next) {
// 在渲染该组件的对应路由被 confirm 前调用
// 不!能!获取组件实例 `this`
// 因为当守卫执行前,组件实例还没被创建
next(vm => {
// 通过 `vm` 访问组件实例
})
},
beforeRouteUpdate (to, from, next) {
// 在当前路由改变,但是该组件被复用时调用
// 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,
// 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
// 可以访问组件实例 `this`
},
beforeRouteLeave (to, from, next) {
// 导航离开该组件的对应路由时调用
// 可以访问组件实例 `this`
}
Vuex
vuex安装
- npm install vuex –save
- 在src目录下新建store文件夹,并在其中创建store.js文件
- 在store.js中写入
vuex使用
- import Vue from ‘vue’ //引入vue
- import Vuex from ‘vuex’ //引入vuex
- Vue.use(Vuex) //使用vuex
- export const store=new Vuex.Store({}) //实例化srore让外部可以正常引用
- state:{menuItems:{}} //设置属性
- getters:{getmenuItems:state=>state.menuItems} //获取属性的状态
- mutations:{} //改变属性的状态
- actions:{setUser({commit},user)} //应用mutations
- import {store} from ‘./store/store.js’ //在main.js中全局引入store.js
- new Vue({store}) //在实例中引用store
vuex使用
- this.$store.commit(“setMenuItems”,res.data) //使用commit触发改变属性状态,去mutations找到
- setMenuItems(‘state’,res.data)方法,第一个参数是状态,第二个参数是数据。在这个方法中只需要把要存储的数据赋给state下面的要存储的对象即可。
- this.$store.state.menuItems //从vuex中获取数据
- this.$store.commit(“setMenuItems”,menuArray) //同步数据
- this.$store.getters.getmenuItems //通过getters获取数据
- this.$store.dispatch(“setUser”,data) //更改状态actions