vue项目搭建 (一)
vue项目搭建 (一)
由于一直想要有自己的框架,因而一直在尝试搭建各类结构,结合
vue官网及git上大神bailicangdu的项目,再看看网上一些意见,及个人思考,总结的一些,不到之处希望大家可以帮我指证,必定虚心接受
技术栈: vue2+vue-router+vuex+axios+webpack+es6/7
项目布局
vue-cli构建初始项目后,在src中进行增删修改
// 此处是模仿github上 bailicangdu 的
├── src
| ├── apsi
| | ├── api.js // 接口详情配置
│ ├── components // 组件
| | ├── common // 公共组件
│ ├── config // 基本配置
│ │ ├── fetch.js // 获取数据
│ ├── images // 公共图片
│ ├── plugins // 引用的插件
│ ├── router
│ │ └── router.js // 路由配置
│ ├── service // 数据交互统一调配
│ │ ├── getData.js // 获取数据的统一调配文件,对接口进行统一管理
│ ├── store // vuex的状态管理
│ │ ├── action.js // 配置actions
│ │ ├── getters.js // 配置getters
│ │ ├── index.js // 引用vuex,创建store
│ │ ├── mutation-types.js // 定义常量muations名
│ │ └── mutations.js // 配置mutations
│ └── style
│ ├── common.css // 公共样式文件
│ ├── App.vue // 页面入口文件
│ ├── main.js // 程序入口文件,加载各种公共组件
├── favicon.ico // 图标
├── index.html // 入口html文件
对上述结构进行详细分析
apis
- api.js
// 这里写所有的接口,便于后期修改管理,若是变动,只需修改当前即可,而不是牵一发动全身
// 切换域名
let baseUrl = null
if (process.env.NODE_ENV === 'development') { //开发环境
baseUrl = 'http://ip:端口号'
} else if (process.env.NODE_ENV === 'production') { //生产环境
baseUrl = 'http://'+ window.location.host
}
//这样后期知道请求方式,都可以好修改,一目了然
const apis = {
getImgs: {
url: '/imgs',
method: 'get',
},
getUser: {
url: '/user',
method: 'post',
},
...
}
export {
baseUrl,
apis,
}
components
- common 用来存放公共组件,便于使用
config
- fetch.js 在下一次中重点分析
store
- getters.js
export default {}
- action.js 正常来说,请求数据 (ajax)写在这里,但当请求相当多时,数据相当不好处理,比正常请求麻烦多了,因而变为 单独建立一个 service文件,用来进行数据请求
import { setUserInfo } from './mutation-types'
import { getUser } from './../service/getData'
export default {
getUserInfo({commit}) {
const res = await getUser()
commit(setUserInfo, res)
},
}
- mutations.js
import { getUser } from './mutation-types'
export default {
[getUser](state, data) {
state.user = data
}
}
- mutation-types.js
export const getUser = 'getUser'
- index.js
import Vue from 'vue'
import Vuex from 'vuex'
import mutations from './mutations'
import actions from './action'
import getters from './getters'
Vue.use(Vuex)
const state = {
user: '', //用户信息
}
export default new Vuex.Store({
state,
getters,
actions,
mutations,
})
- router
- router.js
import Vue from 'vue'
import Router from 'vue-router'
Vue.use(Router)
// 路由懒加载
const Component1 = () => import('./../components/component1')
const Error = () => import('./../components/error')
const router = new Router({
// 使用元信息进行匹配
routes: [
{path: '/', name: 'Component1', meta: { flag: 'in'}, component: Component1},
{path: '/error', name: 'Error', meta: { flag: 'in'}, component: Error},
{path: '*', redirect: {path: '/error'}}
]
})
// 鉴权
import store from './../vuex/index'
router.forEach((to, from, next) => {
const menuList = store.state.user.menuList //用户菜单
const isLogin = store.state.isLogin // 是否登录
// 判断是否有资格进入
let isEnter = false
if (menuList.includes(to.meta.flag)) {
flag = true
} else {
flag = false
}
if (isEnter && isLogin) {
next()
} else {
if (to.path === '/error') {
next()
} else {
next('/error')
}
}
})
我这个只是很浅的,若是深究,每个又可以无限下去,折腾不起,越深,坑越多,难爬,只好先把基础打扎实些了
- 总结
- 下一个专门写网络请求,感觉有很多坑,网上封装的都有些局限,希望我能抛砖引玉,有个更优雅的解决办法
- 路由这个我只是浅显的点一下,里面还有一些我都不知道的,没用到
- vuex 希望可以看到 module具体如何使用就好了,特别是这个action,坑太多,累
还希望各位看官多多指正,谢谢了
vue项目搭建 (一)的更多相关文章
- Vue项目搭建完整剖析全过程
Vue项目搭建完整剖析全过程 项目源码地址:https://github.com/ballyalex 有帮助的话就加个星星呗~! 项目技术栈:vue+webpack+bower+sass+axios ...
- Vue项目搭建与部署
Vue项目搭建与部署 一,介绍与需求 1.1,介绍 Vue 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue两大核心思想:组件化和数据驱动.组 ...
- vue项目搭建 (二) axios 封装篇
vue项目搭建 (二) axios 封装篇 项目布局 vue-cli构建初始项目后,在src中进行增删修改 // 此处是模仿github上 bailicangdu 的 ├── src | ├── ap ...
- Vue项目搭建流程 以及 目录结构构建
Vue项目搭建流程 以及 目录结构构建 一个小的Vue项目, 基于微信浏览器的移动端, 做了这么多的练习项目, 这一次准备记录下构建的过程, 以方便以后的调高效率 环境准备 操作系统 我的 windo ...
- vue项目搭建介绍01
目录 vue项目搭建介绍01 vue 项目框架环境搭建: 创建项目: vue 项目创建流程: vue项目搭建介绍01 vue 项目框架环境搭建: vue 项目框架: vue django(类似)(vu ...
- vue项目搭建介绍02
目录 vue项目搭建介绍02 python-pycharm设置: vue创建项目分类: vue-cli构建 自定义构建 基础的vue项目目录: vue项目搭建介绍02 python-pycharm设置 ...
- requirejs + vue 项目搭建2
上篇是年后的项目搭建的,时间比较仓促,感觉有点low 1.gulp-vue 文件对公用js的有依赖,以后别的同事拿去搭其他项目,估计会被喷 2.不支持vue-loader一样写模版语言和es6语法 最 ...
- requirejs + vue 项目搭建
以前都是支持 司徒正美 的,毕竟咱们也是跟着 司徒正美 一起走进了前端的世界.所以一般MVVM都是用avalon的,当然也是考虑到项目需要支持IE6,7,8的考虑.当然在用的时候也有一些小坑和bug, ...
- Vue项目搭建
1.环境搭建 安装node 官网下载安装包,傻瓜式安装:https://nodejs.org/zh-cn/ 安装cnpm npm install -g cnpm --registry=https:// ...
随机推荐
- java模拟http/https post请求
1.Post请求失败的代码 try { HttpResponse response = httpClient.execute(httpPost); HttpEntity entity = respon ...
- 怎么解决teamviewer检测商业用途无法使用的问题
https://jingyan.baidu.com/article/d5c4b52be51162da560dc517.html
- AJAX跨域问题解决方法(4)——调用方解决跨域
调用方解决跨域的方法只有一种,那就是隐藏跨域. 何为隐藏跨域? 隐藏跨域的核心思路是通过反向代理隐藏跨域以欺骗浏览器 什么是反向代理?反向代理是指通过中间服务器使得访问同一个域名的两个不同url最终会 ...
- centos安装oracle客户端
使用centos远程登陆oracle服务器: 下载需要的rpm包: [root@node1 oracle]# lltotal 59872-rw-r--r-- 1 root root 59865008 ...
- 线程实现Runnable接口比继承Thread的优势
1.适合多个相同程序代码的线程去处理同一资源,把虚拟CPU(线程)同程序的代码.数据有效分离,较好地体现了面向对象的设计思想.2.可以避免由于java单继承特性带来的局限.3.增强了程序的健壮性,代码 ...
- c#实现任务栏添加控制按钮
Windows7Taskbar的使用 你需要引入3个文件VistaBridgeLibrary.dll.Windows7.DesktopIntegration.dll.Windows7.DesktopI ...
- 06_zookeeper_原生API使用2
1. 设置znode节点数据(同步) import org.apache.zookeeper.*; import org.apache.zookeeper.data.Stat; import java ...
- 通过SSH key获取GitHub上项目,导入到IDEA中
1.在Windows上安装Git 在Windows上使用Git,可以从Git官网直接下载安装程序,然后按默认选项安装即可 安装完成后,在开始菜单里找到“Git”->“Git Bash”,或者在文 ...
- LeetCode第[98]题(Java):Validate Binary Search Tree(验证二叉搜索树)
题目:验证二叉搜索树 难度:Medium 题目内容: Given a binary tree, determine if it is a valid binary search tree (BST). ...
- 【性能测试】服务器性能监控、数据采集工具nmon安装使用详解
nmon nmon是一种在AIX与各种Linux操作系统上广泛使用的监控与分析工具,它能在系统运行过程中实时地捕捉系统资源的使用情况,并且能输出结果到文件中,然后通过nmon_analyzer工具产生 ...