从无到有构建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实战项目(四)
六.webpack的安装和配置 为了快速构建vue项目,webpack是一个必不可少的工具,我们先来安装它,附上官网地址:https://www.webpackjs.com/ 要安装最新版本或特定版本 ...
- 从无到有构建vue实战项目(一)
vue的安装 首先下载nodehttp://nodejs.cn/download/ 有两种安装方式安装包安装和二进制文件安装 输入以下命令,出现版本提示表示安装成功: node -v 10.15.3 ...
- 从无到有构建vue实战项目(二)
二.vue项目的初步搭建 该项目我采用了当下最流行的vue ui框架---element-ui,首先用vue-cli构建一个vue项目: vue create education 然后会出现一系列配置 ...
- 从无到有构建vue实战项目(三)
四.响应式布局的实现 elemnt-ui参考bootatrap提供了响应式布局,附上地址:https://element.eleme.cn/#/zh-CN/component/layout 以下是我的 ...
- 从无到有构建vue实战项目(五)
八.错误总结(一) webpack打包项目识别子组件路径问题 之所以出现了这样的问题是因为在webpack打包项目时,未将此处的子组件路径正确识别: 将此处的carousel改为carousel.vu ...
- 从无到有构建vue实战项目(六)
十.徒手撸一个vue下拉左侧二级导航 先附上最终效果图: vue代码: <div class="dropdown-menu-explore" v-on:mouseover=& ...
- 从无到有构建vue实战项目(八)
十六.vue-lazyload的使用 首先,我们需要下载vue-lazyload包: npm i vue-lazyload -S 下载好之后,我们将它引入到自己的项目: //main.js //引入图 ...
- Vue 实战项目: 硅谷外卖(1)
第 1 章: 准备 1.1. 项目描述 1) 此项目为外卖 WebApp(SPA) 2) 包括商家, 商品, 购物车, 用户等多个子模块 3) 使用 Vue 全家桶+ES6+Webpack 等前端最新 ...
- Vue 实战项目开发流程
一 基础配备 ## 一.环境搭建 #### 1.安装node - 去[官网](https://nodejs.org/zh-cn/)下载node安装包 - 傻瓜式安装 - 万一安装后终端没有node环境 ...
随机推荐
- Spring Boot 中 Redis 的使用
Spring Boot 对常用的数据库支持外,对 Nosql 数据库也进行了封装自动化,如Redis.MongoDB等,本文主要介绍Redis的使用. Redis 介绍 Redis 是目前业界使用最广 ...
- 利用git 找到应该对问题代码负责的人--代码定责
场景 有时候突然发现 某部分代码存在明显的问题,代码作者的态度需要调整. 或者发现某些代码存在特意留下的bug或漏洞,代码作者需要出来担责. 这时候我们就需要找出来 需要为有问题代码承担责任的同事,或 ...
- rabbitMQ_routing(四)
路由 本次我们将通过路由将信息发送到指定的队列中,将消息发送给指定的队列需要在转发器和队列之间建立一个routeKey 绑定 在以前的例子中,我们已经创建了绑定.你可能会记得如下代码: channel ...
- 8 NLP-自然语言处理Demo
1 NLP(自然语言处理) 1.1相似度 相似度和距离之间关系: 1.文本相似度: 1) 语义相似.但字面不相似: 老王的个人简介 铁王人物介绍 2) 字面相似.但是语义不相似: 我吃饱饭了 我吃不饱 ...
- bootstrap开发响应式网页的常用的一些 类的说明
1.navbar-导航条 1.navbar-fixed-top,让导航条固定显示在页面上部(注意:固定的导航条会遮住代码,解决方案,给body设置padding-top的值[大于或等于]为我们导航条的 ...
- Thinkphp5.0快速入门笔记(1)
学习来源与说明 https://www.kancloud.cn/thinkphp/thinkphp5_quickstart 测试与部署均在windows10下进行学习. Composer安装和更新 C ...
- 8天入门docker系列 —— 第八天 让程序跑在swarm集群上
真正的落地部署都是希望程序跑在集群下,而不是单机版下测测玩玩,所以这篇就来聊一下怎么使用docker swarm进行部署,因为是swarm是docker自带的, 所以部署起来还是非常简单的. 一:前置 ...
- PPT | Docker定义存储-让应用无痛运行
编者注: 本文为9月27日晚上8点有容云平台存储架构师张朝潞在腾讯课堂中演讲的PPT,本次课堂为有容云主办的线上直播Docker Live时代●Online Meetup-第三期:Docker定义存储 ...
- 控制台出现_ob_:Obsever
我遇到一个问题:我的代码想让他点击之后得到经纬度坐标数组,然后我就这样写了 然而控制台却读取出了
- 什么是Singleton?
Singleton:在Java中即指单例设计模式,它是软件开发中最常用的设计模式之一. 单:指唯一 例:指实例 单例设计模式,即某个类在整个系统中只能有一个实例对象可被获取和使用的代码模式. 要点: ...