上文中说到了利用Element-ui优化了导航栏,本节介绍抽离公共的less变量与利用Element-Ui实现登录注册页面。本项目git地址:

https://gitee.com/vuejslearn/news-list.git

抽离less,引入公共less变量

我们的样式代码采用了less语法,因此很多地方可以封装出一些共性的代码。比如布局上,本项目的布局采用了flex布局。截止目前,我们发现页面中的样式代码有很多相同的flex布局代码:

.flex-display (@dir: column, @content: center, @align: center) { display: flex; flex-direction: @dir; justify-content: @content; align-items: @align;}

如果把这些代码抽离出一个公共的文件,那么对于我们开发速度就会提高很多。那么如何抽离呢?

很简单,首先我们需要安装style-resources-loader插件:

npm install style-resources-loader --save

这个插件是用来帮助我们注入公共的样式文件,导入css / sass / scss / less / stylus这些内容,这样可以避免我们在每个文件里使用import导入。安装完后,我们在vue.config.js中添加对样式文件的导入。

首先在最上面引入path:

// 配置全局less变量 chainWebpack: config => { const types = ['vue-modules', 'vue', 'normal-modules', 'normal'] types.forEach(type => addStyleResource(config.module.rule('less').oneOf(type))) }, css: { loaderOptions: { less: { javascriptEnabled: true } } }

在module.exports里我们加入:

// 配置全局less变量 chainWebpack: config => { const types = ['vue-modules', 'vue', 'normal-modules', 'normal'] types.forEach(type => addStyleResource(config.module.rule('less').oneOf(type))) }, css: { loaderOptions: { less: { javascriptEnabled: true } } }

然后在module.exports后面,我们加入方法:

function addStyleResource (rule) { rule.use('style-resource') .loader('style-resources-loader') .options({ patterns: [ // 需要全局导入的less路径,自己修改 path.resolve(__dirname, './src/assets/styles/global.less') ] })}

ok,配置文件写好后,我们在上面配置的路径里(src/assets/styles),添加配置文件global.less,文件内容就是开头的公共方法:

至此,公共的less抽离完成。我们在一般的页面的使用方法和以前一样,没有任何变化,无需单独引入这个样式文件即可使用。

Vuex持久化

vuex很好用,可以帮助我们记录组件状态,并且是响应式的。但是有个问题,就是它的状态是保存在内存里的,当我们的浏览器刷新后,状态就重新初始化了。比如目前我们的代码中对登录状态的记录,就是。登陆后,我们再刷新浏览器,发现有标记为未登录,这显然不对。有没有一种可能,将我们的状态记录到本地,然后刷新后重新获取呢?这样就不怕刷新了。答案是有的。很简单,我们利用sessionStorage即可实现,那为什么不用localStorage呢?因为前者是会话存储,后者是本地存储,前者当页面关闭后会自动清除,后者不会。

因此我们保持登录状态最好用前者。浏览器退出,或者关闭页面,自动退出登录,比较好。

那具体怎么做呢?很简单我们只要在组件创建后,监听刷新事件,当刷新前,我们持久化状态到本地,然后刷新完,组件重新创建,再把值从本地合并到vuex里。

但是我们想让全局的组件都会这样,那怎么办呢?很简单,我们只需要在app中执行上面的步骤就可以了。

编辑App.vue,添加代码:

created () { // 在页面加载时读取sessionStorage里的状态信息 if (sessionStorage.getItem('store')) { this.$store.replaceState(Object.assign({}, this.$store.state, JSON.parse(sessionStorage.getItem('store')))) } // 在页面刷新时将vuex里的信息保存到sessionStorage里 window.addEventListener('beforeunload', () => { sessionStorage.setItem('store', JSON.stringify(this.$store.state)) }) }

这样,在刷新时,就可以自动的同步数据了。

Vuex多模块构建

目前的vuex是一个模块的,如果我们的应用比较大,把所有的状态都写在这个文件里,那样会越来越臃肿。我们可以按照页面、组件来分模块进行管理。然后都集成到vuex中即可。目前我们只有一个登录页,因此我们创建一个登陆模块,来保存登陆的状态。

在store中,新建modules文件夹,进入后再创建login文件夹,进入后创建index.js。这个文件用来管理登陆页的状态,把之前store/index.js的登录状态移动到这里:

login/index.js

导出这些:

然后,我们去掉store/index.js中原有的登录状态的代码,精简后:

import Vue from 'vue'import Vuex from 'vuex'Vue.use(Vuex)export default new Vuex.Store({ modules: {  })

ok,我们引入之前login的模块,并加入到modules中:

import Vue from 'vue'import Vuex from 'vuex'import login from './modules/login'Vue.use(Vuex)export default new Vuex.Store({ modules: { login }})

这样,我们就成功地分了模块管理了。但是,我们仔细看,在login/index.js中,我们加了一句话:

namespaced: true,

这是什么意思呢?这意思是,我们在每个模块里,使用了命名空间,使用了命名空间,我们的模块就拥有了自己的action、mutation 和 getter 。如果没有,那么我们每建立一个模块,它的mutation等会注册到全局命名空间,这样其他模块,都能随便的对这个mutation做操作。有了命名空间,模块会更加的封闭,同时避免了冲突。

改变了vuex的多模块模式后,我们对登录状态的操作就发生了变化。比如,我们用getters读取login的状态时,语句变成了:

this.$store.getters['login/login']

同时,我们也可以用mapGetters来简化我们的操作:

import { mapGetters } from 'vuex'....computed: { ...mapGetters({ logined: 'login/login' }) },

这样两种方法,我们获取到了某个模块下的状态。同理,更改状态的语句变成:

this.$store.dispatch('login/login')

以上的路径,均是命名空间+对应的getters或者mulation。

以上就是vuex的模块化管理,下篇文章我们将继续在此基础上,实现我们的登录注册页面,同时优化登录与非登陆状态下路由的跳转。先看一看登录、注册完成后的样子吧!

注册页面

登录页面

朋友们也可以直接下载代码运行,可以看到上面的页面。


原创不容易,鉴于本人水平有限,文中如有错误之处欢迎大家指正。以后我会持续发布vue实战系列的文章,喜欢的朋友欢迎关注。

3项目里面全局用less变量 cli vue_Vue实战14——抽离全局less变量与Vuex持久化、多模块构建...相关推荐

  1. 3项目里面全局用less变量 cli vue_VUE CLI3 less 全局变量引用

    方法一 1.添加依赖 style-resources-loader 2.vue.config.js中添加 module.exports = { pluginOptions: { 'style-reso ...

  2. 3项目里面全局用less变量 cli vue_vue-cli3配置使用vw实现移动端适配案例

    前言:本demo是基于脚手架3创建的vue项目,主要演示的是如何使用vw实现移动端适配:并且在项目中如何引入自定义的less全局变量. 一. 配置vw适配: 1. 安装以下插件: npm instal ...

  3. 在python语言中定义私有成员变量的方法是_Python在类中有“私有”变量吗?

    回答(11) 2 years ago python中的私有变量或多或少是一个hack:解释器故意重命名变量 . class A: def __init__(self): self.__var = 12 ...

  4. Django项目于之在线教育平台网站的实战开发(完结)

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 接着上一篇博客继续往下写 :https://blog.csdn.net/qq_41782425/article/details/9 ...

  5. Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(二)安装 nodejs 环境以及 vue-cli 构建初始项目

    Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(二)安装 nodejs 环境以及 vue-cli 构建初始项目 在上一篇<Vue2+VueRouter2+ ...

  6. JS函数简单的底层原理 -变量重复声明无效,隐式申明,变量提升,函数提升,以及堆栈内存的变化

    JS函数简单的底层原理 (个人理解): 1. 已经使用var申明且赋值,若再次申明,则第二次申明(不赋值)无效. 2.在同一个作用域下,只要是发生了同名,且变量完成赋值,后者会覆盖前者.存在两个相同的 ...

  7. centos 配置php开发环境变量配置,CentOS中配置PHP和Nginx环境变量

    搜索热词 一.摘要 在Linux CentOS系统上 安装完PHP和Nginx后,一般需要执行查看版本命令'PHP -v'和'Nginx -v',确认是否安装成功,如果在没有添加到环境变量之前,执行& ...

  8. linux 怎么添加path环境变量,Linux下怎么添加和查看PATH环境变量

    linux下查看和添加PATH环境变量 来自:http://apps.hi.baidu.com/share/detail/32942984 $PATH:决定了shell将到哪些目录中寻找命令或程序,P ...

  9. 文本显示变量_【RPA课堂】UiPath中的变量、数据类型和组件

    自动化出现的那一天起,就有了各种各样的工具来满足自动化的需要.无论是用于windows桌面自动化的简单工具,还是用于企业自动化大量任务的工具,它们都有自己的功能.UiPath就是这样的工具,在本文中, ...

最新文章

  1. linux网卡驱动更换,Ubuntu更换网卡驱动
  2. 如何更改github工程的语言属性
  3. Eclipse 常用最新插件.标记
  4. mysql字段简索引_Mysql索引优化攻略(全)
  5. 大促密集,CDN如何保障电商体验如丝般顺滑?
  6. The Common Language Runtime (CLR)
  7. VS2005无法启动解决方法(转)
  8. [MobX State Tree数据组件化开发][3]:选择正确的types.xxx
  9. 什么流读取MultipartFile_深入理解并运用Node中的IO模型流
  10. 【王俊杰de人工智能实战课】第8次作业
  11. 亿航智能⻓续航⻜机有望在4-8周内首⻜亮相
  12. CentOS7.2 network.service NetworkManager.service 冲突
  13. Android 分析工具 APKAnalyser
  14. Dataguard之redo传输服务
  15. excel流程图折线箭头_如何绘制excel箭头图形
  16. 解决IDEA连接mysql时出现Server returns invalid timezone问题一劳永逸的方法
  17. 复化梯形公式和复化Simpson公式的python实现
  18. excel vba如何在不打开的情况下获取.pdf文件的打印页码数
  19. 二维数组与指向指针的指针
  20. 俯仰角,赤经赤纬,望远镜

热门文章

  1. Java 如何查询硬盘所有文件
  2. 杭电2149Public Sale
  3. MFC中从一个类向其他类发送消息的方法
  4. matlab 复频谱图,基于MATLAB实现连续信号与系统复频域分析
  5. linux查看cpu核数_我们常说的CPU核数指的是什么?
  6. echarts中x轴文件消失_百度Echarts图表在Vue项目的完整引入以及按需加载
  7. linux 修改ramdisk内容,在Linux下使用RamDisk
  8. Linux在文件第一列添加字段,linux – 如何将file1的每一列追加到file2的特定字段并创建一个新的输出文件?...
  9. win10 update 关闭计算机,Win10关闭Windows Update服务的方法
  10. minus出错matlab,请求帮忙指点MATLAB中的语法错误