十四、Vuex的使用

  1. Vuex是什么?

    Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。Vuex 也集成到 Vue 的官方调试工具 devtools extension,提供了诸如零配置的 time-travel 调试、状态快照导入导出等高级调试功能。简单点理解,就是凡是将数据用状态管理模式来存储,在用到该数据的地方,只要一处地方发生变化,另一处也会发生变化,这样就解决了vue中非父子组件传值的问题,当然了,Vuex的作用不止如此,还有许多新的功能,诸如配合路由守卫做登陆拦截,配合localStorage进行本地数据的存储与管理等等。

  2. Vuex的安装

    //npm的安装方式
    npm install vuex --save
  3. Vuex的简单实用

    1. 利用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);
      });
    2. 通过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
    3. 至此,该功能已实现

十五、侧边导航栏的实现

  1. 有时候,我们在项目中有这样的需求,页面左侧是菜单栏,右边是每个菜单项所对应的内容区,点击不同的菜单项,内容区会显示不同的内容,这个怎样实现呢?我采取了子路由渲染的方法,如下:

    1. 假设我们有四个菜单项模块,那么它的路由配置是这样的:

      {
      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)
      }
      ]
      },
    2. 然后我们在它的父级路由所对应的页面加上<router-view></router-view>即可实现该功能

  2. 至此,该功能已实现

从无到有构建vue实战项目(七)的更多相关文章

  1. 从无到有构建vue实战项目(四)

    六.webpack的安装和配置 为了快速构建vue项目,webpack是一个必不可少的工具,我们先来安装它,附上官网地址:https://www.webpackjs.com/ 要安装最新版本或特定版本 ...

  2. 从无到有构建vue实战项目(一)

    vue的安装 首先下载nodehttp://nodejs.cn/download/ 有两种安装方式安装包安装和二进制文件安装 输入以下命令,出现版本提示表示安装成功: node -v 10.15.3 ...

  3. 从无到有构建vue实战项目(二)

    二.vue项目的初步搭建 该项目我采用了当下最流行的vue ui框架---element-ui,首先用vue-cli构建一个vue项目: vue create education 然后会出现一系列配置 ...

  4. 从无到有构建vue实战项目(三)

    四.响应式布局的实现 elemnt-ui参考bootatrap提供了响应式布局,附上地址:https://element.eleme.cn/#/zh-CN/component/layout 以下是我的 ...

  5. 从无到有构建vue实战项目(五)

    八.错误总结(一) webpack打包项目识别子组件路径问题 之所以出现了这样的问题是因为在webpack打包项目时,未将此处的子组件路径正确识别: 将此处的carousel改为carousel.vu ...

  6. 从无到有构建vue实战项目(六)

    十.徒手撸一个vue下拉左侧二级导航 先附上最终效果图: vue代码: <div class="dropdown-menu-explore" v-on:mouseover=& ...

  7. 从无到有构建vue实战项目(八)

    十六.vue-lazyload的使用 首先,我们需要下载vue-lazyload包: npm i vue-lazyload -S 下载好之后,我们将它引入到自己的项目: //main.js //引入图 ...

  8. Vue 实战项目: 硅谷外卖(1)

    第 1 章: 准备 1.1. 项目描述 1) 此项目为外卖 WebApp(SPA) 2) 包括商家, 商品, 购物车, 用户等多个子模块 3) 使用 Vue 全家桶+ES6+Webpack 等前端最新 ...

  9. Vue 实战项目开发流程

    一 基础配备 ## 一.环境搭建 #### 1.安装node - 去[官网](https://nodejs.org/zh-cn/)下载node安装包 - 傻瓜式安装 - 万一安装后终端没有node环境 ...

随机推荐

  1. 用tcp协议实现一个并发的socketserver 进行密文登录

    先在客户端进行摘要,客户端把用户名作为盐. 然后在服务端进行二次摘要,用固定的盐(不能让别人知道你的盐是什么),然后存到文件中,密文存储.或者和文件中的密文对比. 这样即使在网络上用户信息被截获,和存 ...

  2. MySql的数据库优化到底优化啥了都(3)

    嘟嘟在上两个文章里面简单粗糙的讲了讲关于MySql存储引擎的一些特性以及选择.个人感觉如果面试官给我机会的话,至少能说个10分钟了吧.只可惜有时候生活就是这样:骨感的皮包骨头了还在那美呢.牢骚两句,北 ...

  3. 统计学习方法(李航)朴素贝叶斯python实现

    朴素贝叶斯法 首先训练朴素贝叶斯模型,对应算法4.1(1),分别计算先验概率及条件概率,分别存在字典priorP和condP中(初始化函数中定义).其中,计算一个向量各元素频率的操作反复出现,定义为c ...

  4. Kotlin学习快速入门(1)——基本数据类型以及String常用方法使用

    本文适合有Java基础的人 Kotlin语法特点 相比java,省略括号,可以自动判断类型,省略new关键字,空指针捕获 主函数 kotlin文件(kt文件)中,只有要下列的方法,就可以运行,无需像之 ...

  5. vuex的实现

    源代码可以查看我的github:  https://github.com/Jasonwang911/TryHardEveryDay/tree/master/Vuex/vuex-resouce  欢迎s ...

  6. 【Algorithm】插入排序法

    通常人们整理桥牌的方法是一张一张的来,将每一张插入到其他已经有序的牌中的适当位置. • 思想:每步将一个待排序的记录,按其顺序码大小插入到前面已经排序的序列的合适位置,直到全部插入排序完为止. Jav ...

  7. Spring 源码学习(一)-容器的基础结构

    关注公众号,大家可以在公众号后台回复“博客园”,免费获得作者 Java 知识体系/面试必看资料 展示的代码摘取了一些核心方法,去掉一些默认设置和日志输出,还有大多数错误异常也去掉了,小伙伴想看详细代码 ...

  8. Java Lambda表达式forEach无法跳出循环的解决思路

    Java Lambda表达式forEach无法跳出循环的解决思路 如果你使用过forEach方法来遍历集合,你会发现在lambda表达式中的return并不会终止循环,这是由于lambda的底层实现导 ...

  9. Java | Map排序,工具类改进

    package util; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; ...

  10. BootStrap实现简单响应式导航菜单

    用BootStrap实现响应式导航栏,我会对其中的一些样式进行说明.   先上代码,是一个很简单的Demo. <!doctype html> <html> <head&g ...