【vue】基于vue2.x的vue项目最最最基础模板
前言
好久不见啊大家,今天想写这篇博客的时候才发现博客已经断更大半年了(手动滑稽)
由于去年十二月份被公司再次发配到上海出差,而且这次主要开发的是针对IE浏览器的一个插件(c++ 和 js 的交互)
所以就很长时间没有接触外网了,更别说开发外网的项目了,博客也没什么可更新的了
这篇博客是插件已经基本开发完成,马上又要重新接手外网的项目了
就准备重新给大家搭建个vue项目最最最最最基础模板顺便自己再回顾下
一、项目基础
好了,不多BB直接上干货,先说下这个项目用到的东西
- vue2.x
- vuex
- vue-router
- axios
- element-ui
- nprogress
- moment
- babel-polyfill
- normalize
- vue-cli4.0
虽然3.0快要发布了,但是个人觉得短期内还是没有升级的必要的
vue的全家桶系列vuex的使用根据自己的项目需求来,千万不要为了使用而使用
二、项目目录
先上一张项目目录图,再单独介绍各个目录
目录 | 说明 |
node_modules | 项目依赖模块包 |
public | 存放静态文件 |
src | 源代码目录 |
src -> api | 全局接口目录,应与views目录对应 |
src -> assets | 静态文件目录 |
src -> componets | 全局组件目录 |
src -> filters | 全局过滤器目录 |
src -> router | 路由目录 |
src -> store | 状态管理目录 |
src -> utils | 工具目录 |
src -> views | 页面目录,应与api目录对应 |
src -> App.vue | 主页面 |
src -> main.js | 入口文件 |
.env.development | 开发环境配置文件 |
.env.production | 正式环境配置文件 |
.env.test | 测试环境配置文件 |
.gitignore | git忽略配置文件 |
babel.config.js | babel配置文件 |
package-lock.json | - |
package.json | 依赖配置文件 |
README.md | 说明文件 |
vue.config.js | 项目配置文件 |
三、axios的封装和使用
在项目里面对axios封装能够节省不少的代码和时间,首先在 src -> utils 目录下新建 request.js 文件
// src -> utils > request.js文件import axios from "axios";
import { Message } from "element-ui";const service = axios.create({baseURL: process.env.VUE_APP_BASE_URL,timeout: 0
});service.interceptors.request.use(config => {//如果本地存储里有JSESSIONID就携带上去,一般是自己登录后存进去的const JSESSIONID = sessionStorage.getItem("JSESSIONID");if (JSESSIONID) {config.headers["JSESSIONID"] = JSESSIONID;}return config;},error => {Promise.reject(error);}
);service.interceptors.response.use(response => {const res = response.data;//此处的值自己与后台约定if (res._code != "200") {Message.closeAll();Message({message: res._msg,type: "error",duration: 3 * 1000});return Promise.reject(res);} else {return res;}},error => {var status;try {status = error.response.status;} catch (error) {//解决跨域等问题的错误下获取不到statusMessage.closeAll();Message({message: "服务器未知错误",type: "error",duration: 3 * 1000});return Promise.reject(error);}let msg = "";switch (status) {case 400:msg = "错误的请求";break;...default:msg = "连接错误";break;}Message.closeAll();Message({message: status + msg,type: "error",duration: 3 * 1000});return Promise.reject(error);}
);
export default service;
比如 views -> home > index.vue 文件里用到了 getInfo 接口 那么就在 api -> home -> index.js中封装
// api -> home -> index.js文件import request from "@/utils/request";export const getInfo = params => {return request({ url: "/getInfo", method: "get", params });
};
使用的时候如下
// views -> home -> index.vue文件<script>
import { getInfo } from "@/api/home/index.js";
export default {name: "home",data() {return {};},created() {this.startApi();},methods: {startApi() {let params = {name: "lyk"};getInfo(params).then(res => {console.log(res);}).catch(err => {console.log(err);});}}
};
</script>
这样封装以后就能很方便的统一管理接口了
四、全局组件的注册和使用
当我们的项目有很多和全局组件的时候,每次都要在main.js里面进行引入和注册。这样看起来很麻烦,使用webpack的require.context就能巧妙的解决这个问题了
在components目录下新建index.js文件用来批量注册全局组件
// components -> index.jsimport Vue from "vue";// 处理大小写
function changeStr(str) {return str.charAt(0).toUpperCase() + str.slice(1)
}// 批量匹配注册
const requireComponent = require.context('.', false, /\.vue$/)
requireComponent.keys().forEach(fileName => {const config = requireComponent(fileName)const componentName = changeStr(fileName.replace(/^\.\//, '').replace(/\.\w+$/, ''))Vue.component(componentName, config.default || config)
})
然后在main.js里面引入
// main.js/* 引入全局组件注册 */
import "./components";
完成之后只需要在components目录下新建xxx.vue文件就可以自动注册组件了
五、全局过滤器的注册
当我们需要对变量进行处理的时候,就会用到过滤器,当前我们总不能一个过滤器注册一次吧,肯定也要批量注册
在 filters 目录下新建 index.js 文件用来存放过滤器,我就用一个对日期处理的例子来说明
// filters -> index.js文件/*** 格式化日期* @param {string} time 时间戳* @param {string} type 分隔符*/
export const formatDate = (time, type) => {if (time) {var date = new Date();date.setTime(time);var year = date.getFullYear();var month =date.getMonth() + 1 < 10? "0" + (date.getMonth() + 1) * 1: date.getMonth() + 1;var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();if (type == "-") {return year + "-" + month + "-" + day;} else if (type == "/") {return year + "/" + month + "/" + day;} else if (type == ".") {return year + "." + month + "." + day;} else {return year + "年" + month + "月" + day + "日";}}
};
然后在main.js里面批量注册就可以了
// main.jsimport * as filters from "./filters";
Object.keys(filters).forEach(key => Vue.filter(key, filters[key]));
六、路由的分区和nprogress的使用
当项目页面过多的时候,如果单纯使用一个路由文件,难免看起来比较复杂,所以这个时候根据功能进行分区引入就显得比较优雅,再配合nprogress插件显示顶部进度条就更完美了
在 router 目录下新建index.js文件代码如下
// router -> index.jsimport Vue from "vue";
import VueRouter from "vue-router";
import NProgress from "nprogress";
import "nprogress/nprogress.css";
NProgress.configure({ showSpinner: false });
Vue.use(VueRouter)// 所有的路由数组
const routerList = [];// 该函数用于将所有分区路由中的路由添加到路由数组
function importAll(routerArr) {routerArr.keys().forEach(key => {routerList.push(routerArr(key).default)})
}
//检测当前目录下所有的 xx.routes.js 文件
importAll(require.context(".", true, /\.routes\.js/))const routes = [...routerList
]const router = new VueRouter({routes
})//进入启动进度条
router.beforeEach((to, from, next) => {NProgress.start();next();
});//打开后关闭进度条
router.afterEach(() => {NProgress.done();
});export default router
然后在根据功能在 router 目录下新建例如 login.routes.js、user.routes.js 的路由文件就会自动引入到index.js里面注册路由
// router -> xx.routes.jsexport default {path: '/',name: 'Home',component: () => import('../views/home/index.vue'),children: [...]
}
总结
这篇博客就是用来介绍这个项目搭建的一些优雅点的
具体的代码为了节省你们的积分已经上传到github:基于vue2.0的vue项目模板
基本上项目用到的我认为算是在基础上能更优雅开发的点都已经列出来了,如果有疑问可以留言提出来
项目里没有提及关于store的使用,因为这个一般小项目用不到,当然配合它配合axios和element-ui也可以实现一个好玩的点
具体看我这篇博客:vuex+axios+element-ui实现页面请求loading
关于初始化项目的搭建可以看我这篇博客:使用vue-cli4.0快速搭建一个项目
关于项目环境的区分可以看这篇博客:使用vue-cli3.0/4.0搭建的项目如何区分环境
细心的读者应该发现了,代码中多次使用了 require.context 来实现前端工程自动化,使用它也可以封装svg图标的使用
具体看花裤衩大神的这篇博客:手摸手,带你优雅的使用 icon
ok,作为一个初学者的装逼结束了,有问题欢迎各位大佬留言
【vue】基于vue2.x的vue项目最最最基础模板相关推荐
- 【Vue】Vue2创建移动端项目实战教程,创建移动端项目保姆级教程,接上一篇创建Vue2项目(下)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.创建vue2项目 二.移动端适配 1.安装插件flexible (适配移动端) 2.安装 postcss-pxto ...
- vue: vue2.0 + ts + vuex 项目
使用ts有三种方式创建组件 option api (Vue.extend({})这种方式,而不是exportdefault{}) class api (见下面) class api + decorat ...
- vsc写vue生成基本代码快捷键_Vscode添加用户代码实现基础模板快速调用
今天在做项目的时候,每次新建一个vue页面的时候总是要写基本模块,回想起VS code提供了用户代码调用的功能,能够直接通过快捷键调用重复代码片段,写这篇文章记录一下 文件==>首选项==> ...
- Win7 搭建NodeJs、Vue2、Vue3,基于 vue-cli 创建建vue工程及相关问题解决思路
Win7 搭建NodeJs.Vue2.Vue3,基于 vue-cli 创建建vue工程及相关问题解决思路 安装NodeJs NodeJs 相关配置 安装vue和vue脚手架 安装 webpack 打包 ...
- vue尚品汇商城项目-day00【项目介绍:此项目是基于vue2的前台电商项目和后台管理系统】
文章目录 本人其他相关文章链接 项目介绍:此项目是基于vue2的前台电商项目和后台管理系统 此项目为在线电商Web App (SPA) 包括首页, 搜索列表, 商品详情, 购物车, 订单, 支付, 用 ...
- 基于Vue开发的电商APP项目——蘑菇街app
基于Vue开发的电商APP项目--蘑菇街 项目源码:https://github.com/Limna777/Shopmall.git 1.项目描述 2.使用的插件或第三方库 3.页面主要实现的功能 1 ...
- vue结合饿了么_饿了么基于Vue2.0的通用组件开发之路(分享会记录)
Element:一套通用组件库的开发之路 Element 是由饿了么UED设计.饿了么大前端开发的一套基于 Vue 2.0 的桌面端组件库.今天我们要分享的就是开发 Element 的一些心得. 官网 ...
- Vue学习笔记(三)Vue2三种slot插槽的概念与运用 | ES6 对象的解构赋值 | 基于Vue2使用axios发送请求实现GitHub案例 | 浏览器跨域问题与解决
文章目录 一.参考资料 二.运行环境 三.Vue2插槽 3.1 默认插槽 3.2 具名插槽 3.3 作用域插槽 ES6解构赋值概念 & 作用域插槽的解构赋值 3.4 动态插槽名 四.GitHu ...
- [vue插件]基于vue2.x的电商图片放大镜插件
最近在撸一个电商网站,有一个需求是要像淘宝商品详情页那样,鼠标放在主图上,显示图片放大镜效果,找了一下貌似没有什么合适的vue插件,于是自己撸了一个,分享一下.小白第一次分享,各位大神莫见笑. vue ...
最新文章
- 超级计算机 任务提交,vasp在超算中心的任务提交 - 第一原理 - 小木虫 - 学术 科研 互动社区...
- f5 会话保持 负载均衡_四层负载均衡和七层负载均衡区别在哪里?
- java反射po转vo_Java项目的(PO,VO,TO,BO,DAO,POJO)解释(转)
- 全局路径规划:图搜索算法介绍2(A star)
- oracle9i怎样管理数据,Oracle9i数据库管理员使用大全
- 路由器下一跳地址怎么判断_路由器的功能及工作原理
- LintCode 二叉树的最小深度
- [VBA]工作需求,写了段VBA。EXCEL的效率很差
- 【我看Spring】从一个简单的AOP示例看切面编程
- 台风怎么看内存颗粒_一文全懂!内存条超频、稳定怎么看?——从入门到精通...
- android 分区 加密软件,VeraCrypt(硬盘分区加密软件)
- 网易云课堂计算机专业,网易云课堂“计算机专业课程”开课
- 史上最简单的SpringCloud教程 | 第六篇: 分布式配置中心(Spring Cloud Config)(Finchley版本)
- 邮箱收不到验证邮件怎么回事?为什么我的电子邮件收不到验证码的原因,无限容量邮箱开通
- MAC怎样显示隐藏文件
- java语言程序设计第六章答案_Java语言程序设计(一)课后习题第六章(附答案)
- RecyclerView源码学习笔记(一)构造函数和setLayoutManager方法
- 这就是区块链开源底层软件平台——长安链ChainMaker
- Linux九阴真经之大伏魔拳(zabbix 监控)
- 利好消息!康复肺炎患者抗体血浆有助于拯救危重病人!捐献号召一呼百应
热门文章
- 淘宝消费层级能查询方法 淘宝消费层级与店铺不一致怎么办
- 华夏名网虚拟主机如何导入mysql/mssql数据库,怎样自已导入数据到华夏名网数据库
- 另一个代码重用的著名bug -- 阿丽亚娜5型火箭的杯具处/女秀
- Arthas 的 sc 命令和 sm 命令实战
- 怎么给电话手表安上Android,电话手表安卓版
- 【实战与杂谈】本地搭建自己的游戏王卡片生成器
- java季度第一天_java获取某月,某季度的第一天和最后一天
- 网易云课堂的不良体验总结
- Asterisk对接潮流的FXO网关GXW410x实现异地落地方法
- 搜索引擎如何面对Web3.0