最近业余帮朋友做两个vue项目,一个是面向用户纯展示系列的(后统称A项目),一个是后端管理系统类的(后统称B项目)。两者在技术上都没难度,这里对开发过程遇到的问题、取舍等做一个小节。

关于项目搭建

目前vue-cli脚手架已经很成熟,创建项目很方便,按照官网文档或网上相应教程即可快速搭建(https://cli.vuejs.org/zh/guide/deployment.html

优点:快速、方便、零配置、可扩展性强、灵活性强

缺点:对于小项目来讲,搭建不够精简,会默认安装多余的包(比如会默认按照jest,nightwath,这些测试框架一般都没有用到)

PS:如果有用到单元测试且在本地运行,需在jest.config.js配置下新增两个字段:

verbose: true,
testURL: 'http://localhost/'
并移除如下字段
mapCoverage: true,

关于http请求

采用axios,对http请求结果做统一处理后,列如请求结果返回code为200时处理后直接返回期望值data,非200时按实际情况处理,比如统一弹toast或者跳转、重定向等。

关于UI框架

A项目采用iview,B项目采用elementUI

从使用舒适度来讲,elementui完胜iview。其组件引用更便捷、自定义样式更灵活,事件绑定更贴近vue开发习惯。

iview体验较差的原因有:

1. button组件、以及menu组件下的menuitem等点击事件绑定需要写成@click.native形式,否则点击事件可能不生效;

2. 按官网文档引入iview-loader后,并不是所有组件都能直接以组件名的方式引用,如menu组件下的menuitem,依然要写成i-menu-item才生效 (对此,既然官网文档已出但却没有达到如述期望,因此对它不太信任...)

关于路由非登录重定向

这里提供两种方案:

1. 保存登录状态,在目标路由页面进行登录状态判断,若未登录,重定向

2. 在路由管理处,通过路由导航守卫做登录检测,若未登录,重定向(推荐这种方式,实现请参考https://github.com/vuejs/vue-router/blob/dev/examples/auth-flow/app.js

A、B项目的登录状态isLogin均挂载在vue实例上,通过this.$root.isLogin可全局访问。其取值来自localStorage里键名为loginState的值。loginState的值是在登录或退出成功的时候设置。其弊端是当loginState的值被手动修改,那么展示状态也会随着更改。但因接口都需权限,且在路由或相应页面做了处理,所以几乎没什么影响。【之所以没用cookie,是为了用户安全起见,服务端将cookie设置为只读,本地拿不到cookie,一定程度上防御了xxs攻击】

关于upload组件上传文件跨域问题

因为elementui或iview upload组件上传文件时使用的是其底层的axios请求,若其action属性下的接口地址与本地的域名或ip不统一,就会存在cookie跨域的问题。解决方法就是统一域名或ip。

关于elmentui upload组件有删除提示时,终止文件上传会提示“是否删除文件xxx”的bug绕行

elementui upload组件做文件上传类型限制时,有两种方案:

1. 直接在其accept属性里设置允许上传的文件类型(推荐这种)

2. 在其beforUpload里做类型判断,如果为期望类型,返回true允许上传,否则返回false,终止上传。

方案2本来是没问题,但如果在beforeRemove函数下引入了this.$confirm('确定删除xxxxx')?,就会出现bug:beforUpload返回false,upload组件下任务会展示文件上传进度及上传成功,并同时弹出“确定删除xxxxx”的提示框。在这里文件确实没有上传,推测upload里展示的上传可能是个假象,但会给人莫名其妙的感觉,为了避免这个问题,在beforeRemove里做一个判断,即:当文件允许上传时才调用this.$comfirm方法,否则不做处理。

关于菜单激活项与当前路由匹配的解决方案

两种UI框架的思路一样,以elementui为例,设置为router模式,对应el-menu-item的index属性取值为目标路由名,如‘/dashboard’,点击这个菜单项时就会自动导航到目标路由。我们希望点击这个菜单项时,菜单为激活状态,menu有个属性为default-active,将该属性动态取值为路由名就行,假设default-active='activeIndex', 通过coumputed监测当前路由值即可:

computed: {

 activeIndex () {

   return this.$route.path // 此处建议路由名称统一小写,在取得路由值的时候将字母统一小写,不然名称大小写不一致会影响激活状态的展示

  }

}

关于数组遍历后单项选中状态的样式设置

有两种方案,

1. 后端字段返回selected状态值,假设true为选中,false为选中,前端点击后,将这个值取反

2.前端设置一个curIndex变量,点击之后就复制当前index给curIndex,在html片段里做条件判断,如果curIndex === index,则展示选中样式。

关于内容块如课程模块(涉及章、节标题)的新增、删除、修改的开发

惯用的思维可能会联想到点击新增、删除等会直接进行dom节点的相应操作,这其实不太可取。因为新增的模块越多,就不好管理消耗比较大。但直接利用vue数据的特性,对其课程模块数组进行增、删、改就会容易很多。

完整开发vue后台管理系统小结的更多相关文章

  1. vue开发后台管理系统小结

    最近工作需要用vue开发了后台管理系统,由于是第一次开发后台管理系统,中间也遇到了一些坑,想在这里做个总结,也算是对于自己工作的一个肯定.我们金融性质的网站所以就不将代码贴出来哈 一.项目概述 首先工 ...

  2. vue后台管理系统权限处理

    vue后台管理系统权限 1.权限问题:用户和管理员进入管理系统看到的模块是不一样的,管理员看的的要比用户看到的多.需要用到动态加载路由,router.addRouters()来动态的挂载路由 // 1 ...

  3. VUE 后台管理系统权限控制

    谈一谈VUE 后台管理系统权限控制 前端权限从本质上来讲, 就是控制视图层的展示,比如说是某个页面或者某个按钮,后端权限可以控制某个用户是否能够查询数据, 是否能够修改数据等操作,后端权限大部分是基于 ...

  4. JBuss--为所有JFinal开发者提供二次开发的后台管理系统

    百度搜索:JBuss 或jfinal.com官网https://www.jfinal.com/share/1704 JBuss背景: 2018年6月1日,作者“为道日损”从上海一家xxx公司离职,那时 ...

  5. egg.js 完整实例2后台管理系统

    项目地址 github.com/richard1015… 技术栈 Vue.js.iview.websocket.Amap 演示地址: 后台管理 schoolmgr.zhuzhida.vip 前台展示 ...

  6. vue后台管理系统遇到的注意事项以及总结

    地址栏加#号问题:Vue-router 中有hash模式和history模式,vue的路由默认是hash模式,一般开发的单页应用的URL都会带有#号的hash模式第一步在router/index.js ...

  7. vue后台管理系统兼容问题

    1.兼容 兼容问题主要是指ie9以下的ie浏览器. 2.兼容问题原因 (1)低版本ie不支持编译后的es5 (2)低版本ie不支持Promise 3.解决方法 (1)引入es6-promise &am ...

  8. vue 后台管理系统菜单权限管理

    来自:https://www.cnblogs.com/fqh123/p/11094296.html 侵删 login登录方法 login() { if (!this.username) { retur ...

  9. vue后台管理系统组件弹窗

    //addFormVisibleIcon可在data中设置true与falsehttps://element.eleme.io/#/zh-CN/component/installation <e ...

随机推荐

  1. 彻底搞定Javascript事件循环

    参考链接:https://juejin.im/post/5dca8a8be51d45227239abc4?utm_medium=hao.caibaojian.com&utm_source=ha ...

  2. [转帖]windows CIFS sabma协议识

    windows CIFS sabma协议识别 https://www.cnblogs.com/tcicy/p/9992871.html 公司的一个共享服务器就是 win2003的 mount 的时候 ...

  3. 使用kubeadm进行单master(single master)和高可用(HA)kubernetes集群部署

    kubeadm部署k8s 使用kubeadm进行k8s的部署主要分为以下几个步骤: 环境预装: 主要安装docker.kubeadm等相关工具. 集群部署: 集群部署分为single master(单 ...

  4. 宝塔面板liunx开启ssl域名后无法访问解决方法

    不打开宝塔面板的ssl会不安全,打开了就会提示ssl证书不能使用的错误 如下所示: 您的连接不是私密连接 攻击者可能会试图从 你的ip 窃取您的信息(例如:密码.通讯内容或信用卡信息).了解详情 NE ...

  5. 第九章 ZYNQ-MIZ701 片上ADC的使用

      9.0难度系数★☆☆☆☆☆☆ 9.1实验概述 这次借助zynq的内嵌的XADC来采集zynq内部的一些参数: •VCCINT:内部PL核心电压 •VCCAUX:辅助PL电压 •VREFP:XADC ...

  6. 少儿编程Scratch第三讲:宇宙大战.枪战游戏

    小朋友这周的表现还算不错.周末多数时间都由我陪(bi)着(zhe)做课本上的数学题,后来还学了英语.任重道远啊,语数外都还得加强,还远不到自己就能取得好成绩的阶段. 上周说好这周要做一个发射炮弹的游戏 ...

  7. JAVA对存储过程的调用方法(本文源于网络)

    博客分类: java java存储过程sql  一:Java如何实现对存储过程的调用:   A:不带输出参数的   ---------------不带输出参数的-------------------- ...

  8. HeidiSQL 导入Excel数据

    一 前言 原文出处:http://blog.csdn.net/qq_27727681/article/details/53944744 二 效果演示: 2000多条数据,顺利导入成功. 三  实现方法 ...

  9. 并不对劲的CF1194E:Count The Rectangles

    题意 有\(n\)(\(n\leq 5000\))个平行于x轴或平行于y轴的线段.求这些线段围成了多少个长方形.由多个长方形拼成的也算. 题解 考虑暴力的做法:先分别计算每条横着的线与哪些竖着的线有交 ...

  10. Jobs(一)前端页面

    Java Web工程中的Intellij中Java Web工程的基本目录: 启动web工程后,显示的默认页面是index.html.需要注意的是,本来IDE自建的是index.jsp,我暂时改成了in ...