从无到有构建vue实战项目
Posted ktddcn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从无到有构建vue实战项目相关的知识,希望对你有一定的参考价值。
十四、Vuex的使用
Vuex是什么?
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。Vuex 也集成到 Vue 的官方调试工具 devtools extension,提供了诸如零配置的 time-travel 调试、状态快照导入导出等高级调试功能。简单点理解,就是凡是将数据用状态管理模式来存储,在用到该数据的地方,只要一处地方发生变化,另一处也会发生变化,这样就解决了vue中非父子组件传值的问题,当然了,Vuex的作用不止如此,还有许多新的功能,诸如配合路由守卫做登陆拦截,配合localStorage进行本地数据的存储与管理等等。
Vuex的安装
//npm的安装方式 npm install vuex --save
Vuex的简单实用
利用Vuex和localStorage进行用户状态管理,防止刷新浏览器后用户状态丢失,实现如下:
//发送请求 this.axios .post( "url", JSON.stringify(this.userInfo) ) .then(res => console.log(res.data); if (res.status == 200 && res.data.verify == true) const userName = res.data.uphone; const token = res.data.token; this.$router.push( path: "/" ); //将token通过commit提交到Vuex this.$store.commit("getToken", token); // 将登录名使用vuex传递到Home页面 this.$store.commit("userName", userName); else this.$notify( title: "提示信息", message: "账号或密码错误", type: "error" ); ) .catch(err => console.log(err); );
通过Vuex和localStorage存储用户信息以保持用户状态
import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) const mutations = userName: (state, user_name) => state.user_name = user_name // 把登录的用户的名保存到localStorage中,防止页面刷新,导致vuex重新启动,用户名就成为初始值的情况 localStorage.setItem('user_name', user_name) , getToken(state, token) state.token = token; localStorage.setItem('token', token) , const state = user_name: localStorage.getItem('user_name'), token: localStorage.getItem('token'), // getters 只会依赖 state 中的成员去更新 const getters = userPhone: (state) => state.user_name, token: (state) => state.token, const store = new Vuex.Store( actions, mutations, state, getters ) export default store
至此,该功能已实现
十五、侧边导航栏的实现
有时候,我们在项目中有这样的需求,页面左侧是菜单栏,右边是每个菜单项所对应的内容区,点击不同的菜单项,内容区会显示不同的内容,这个怎样实现呢?我采取了子路由渲染的方法,如下:
假设我们有四个菜单项模块,那么它的路由配置是这样的:
path: '/inform', name: inform, component: (resolve) => require(['../components/presonal/inform.vue'], resolve), meta: isLogin: true , children: [ path: '/inform/course', name: course, component: (resolve) => require(['../components/presonal/slider/course.vue'], resolve) , path: '/inform/interactive', name: interactive, component: (resolve) => require(['../components/presonal/slider/interactive.vue'], resolve) , path: '/inform/system', name: system, component: (resolve) => require(['../components/presonal/slider/system.vue'], resolve) , path: '/inform/privateLetter', name: privateLetter, component: (resolve) => require(['../components/presonal/slider/privateLetter.vue'], resolve) ] ,
然后我们在它的父级路由所对应的页面加上
<router-view></router-view>
即可实现该功能
至此,该功能已实现
以上是关于从无到有构建vue实战项目的主要内容,如果未能解决你的问题,请参考以下文章
vue+vue-router+axios+element-ui构建vue实战项目之七(渲染content.vue内容)
Vue实战Vue-cli项目构建(Vue+webpack系列之一)
Vue实战Vue-cli项目构建(Vue+webpack系列之一)