关于VUE创建使用过程

从18年7月16号入职到现在已经5个月多了,入职之后就一直使用vue,来这边温习记录下使用的步骤。在我的理解中vue其实每个组件都是有同一个根父组件app,这个app父组件是挂在html文件上的,页面的转换只是html文件里面组件的转换,所以形成了静态页面。如果有什么理解误区,望各位大佬可以指点出来,不胜感激。

项目创建使用等步骤

全局安装vue脚手架vue-cli
npm install --global vue-cli
创建一个基于webpack 模板的新项目(切换路径到创建的文件夹下)
vue init webpack myproject (myproject项目的名称)

之后会出现创建项目一些选择信息vue
Project name (项目名称,不可以大写)
Project description (项目描述)
Author (作者)
Vue build (
vue创建的方式)
Install vue-router (
是否安装路由,vue的页面内容的变换基本都是路由的变化,这个是必须安装的,也可以手动在项目里面安装, npm i vue-router)
Use ESLint to lint your code (是否使用ESLint检测你的代码,是一种语法规则建议使用)
Pick an EESLint preset (选择分支风格,我一般都是选择第一个:standard(https://github.com/feross/standard) js的标准)
Set up unit tests (是否安装单元测试,这个我也是默认安装的,但是基本没有使用过,哈哈)
Pick a test runner (选择一个单元测试运行器,这个也是同上哈~~)
Setup e2e tests with Nightwatch (是否安装E2E测试框架NightWatch,E2E就是End to End,即消费端对产品端的商业模式)
Should we run 'npm install' for you after the project has been created? (在项目创建后,我们需要为您运行“NPM安装”吗?有三个选项,我选择的是第一个npm)
我基本上创建的时候一路回车到底,全部默认,感觉那个单元测试我可以省略不安装~~~

创建完成之后使用WebStorm打开(我用的开发工具是webstorm)
打开之后的目录结构大概是这个样子:

初始结构

assets中一般存放静态资源文件
components中存放些vue组件(我一般都是把导航栏、菜单栏、页脚、路由主要显示部分、和一些多处使用的组件放在里面)
router中有一个index.js文件,里面就是路由的注册,先引入文件,然后注册
const 组件名称= resolve => require.ensure([], () => r(require('@/组件地址')), resolve)
{
    path:'/example', name:'example',
    meta: {
        requireAuth: true;(这边我基本上都是用来判断这个路由是否需要登录)
    },
    component:example
},

还有一种注册方式,路由的懒加载,不需要引入组件了 (这种方式还是比较不错的虽然我用的比较少,毕竟项目文件不是很大,比较推荐这种)
{
    path:'/example', name:'example',
    meta: {
        requireAuth: true;(这边我基本上都是用来判断这个路由是否需要登录)
    },
    component (resolve) {
        require(['@/组件地址'], resolve)
    }
},

每次我都是会重新创建文件夹自定义我自己喜欢的目录结构:

自定义结构

assets文件夹里面添加了images(图片资源),scss(scss样式文件),temp(临时文件,项目上线之前删除)
components文件夹里面加了一个layout文件夹,我都是存放导航栏,页脚,左侧菜单栏,路有部分内容
http只要是axios请求的文件配置封装文件
util存放一些工具配置文件,比如富文本(我一般也只用在这里了。。。)
variable是全部变量的统一处理的文件我把需要用到的全局变量全部封装到这个文件夹下的js中了
views就是主要的路由组件了

结构弄完了,下面就需要做些配置了(main.js文件)

Element(https://element.faas.ele.me/#/zh-CN)

配合vue使用的页面样式我一般都是用的Element,下面安装Element(https://element.faas.ele.me/#/zh-CN)
npm i element-ui -S
安装完成之后引入样式和组件库
import 'element-ui/lib/theme-chalk/index.css'
注册
Vue.use(ElementUI)

router

如果创建项目的时候没有安装路由就需要安装了
npm i vue-router
在创建vue实例的时候加上router

sass(https://www.sass.hk/)

之后在安装一个sass,一个CSS扩展语言
安装sass依赖包
npm install --save-dev sass-loader
npm install --save-dev node-sass
由于会使用sass的全局变量需要安装一个依赖包
npm install --save-dev sass-resources-loader
在build文件夹下的webpack.base.conf.js的rules里面添加配置(这边我没有配置,也是ok的,不明所以)
{test:/\.sass$/, loaders: ['style','css','sass']}
在assets下的scss文件夹中新建index.scss文件(里面写全局样式)
在新建_variable.scss文件(全局变量,sass规定部分样式引入文件名前面需要加下划线)
在index.scss中引入_variable.scss
@import "variables";
我在gitHub上看到了一个页面标准化文件,被我copy下来导入(https://github.com/necolas/normalize.css/blob/master/normalize.css)
_normalize.scss文件导入index.scss
@import "normalize";
在mian.js文件中引入scss全局样式
import '@/assets/scss/index.scss'
由于样式变量不可以在组件中直接使用,需要引包,觉得有点low,就查资料最后找到了方法
在build文件夹下的utils.js文件cssLoaders中加上这些代码:

并且将下面的sass和scss替换掉:

全局变量

之后在搞一下全局变量,我一般用来存接口请求IP和端口号
在variable下创建index.js,格式如下
export default{
    host: '',

如果有其他的全局变量可以继续往下写
mian.js 引入
import Variablefrom './variable/index.js'
Vue.prototype.variable = Variable

Quill富文本(https://www.npmjs.com/package/vue-quill-editor)

如果需要使用富文本,我使用的是Quill
安装依赖
npm install vue-quill-editor --save
在mian.js中引入,并且引入样式
import VueQuillEditor from 'vue-quill-editor'
import 'quill/dist/quill.core.css'
import 'quill/dist/quill.snow.css'
import 'quill/dist/quill.bubble.css'
注册
Vue.use(VueQuillEditor)
Quill是可以自定义配置的,我是将配置文件放到了util文件中的然后在使用的页面引入配置,因为它自带的图片上传是base64,直接入库的话,请求头太长,导致网页十分的卡,文件上传的处理十分非常有必要的,下面是我在上一个项目中富文本的配置

Quill富文本配置

下面的是图片上传处理

图片处理
图片处理

Distpicker地区插件(https://www.npmjs.com/package/v-distpicker)

下面是地区组件,一般来说地区存在数据库中,但是有些项目比较小所以会在前台使用地区组件,我使用的是Distpicker
安装
npm install v-distpicker --save
在mian.js中引入
import Distpicker from 'v-distpicker'
注册
Vue.use(Distpicker)
Vue.component('v-distpicker', Distpicker)

axios (https://www.npmjs.com/package/axios)

接下来就是axios请求的封装处理了
安装
npm install  --save axios
在mian.js中引入
import axios 'axios' (axios不需要使用vue.use(),我也是不明所以然啊
到这里我都会对axios进行二次封装
在http文件夹中新建api.js 文件
引入axios
import axios 'axios' 
对post,get请求进行封装
get请求:

get请求封装

postJson请求:

postJson请求封装

postForm请求:

postForm请求封装

文件请求:(这个其实不怎么用到Element有文件上传的插件)

文件请求封装

封装完成了之后对它们进行输出(install 方法将被作为 Vue 的参数调用):

输出

在mian.js中引入并且注册
import axiosApi from '@/http/api.js'
Vue.use(axiosApi)
axios有两个拦截器请求拦截器,响应拦截器可以进行处理
响应拦截器:

响应拦截器

请求拦截器:(上个项目中使用的是token)

请求拦截器

vuex (https://vuex.vuejs.org/)

由于之前的项目是使用的token我就使用了vuex
安装
npm install vuex --save
在根目录下面新建store文件夹,再创建index.js文件
在index.js文件中引入
import Vuefrom 'vue'
import Vuexfrom 'vuex'

注册 Vuex
Vue.use(Vuex)
大体如下:(期中两个方法分别存和删token)

vuex

在main.js中引入
import storefrom '../store'(vuex已经在index.js文件中注册过了,所以不需要再注册了)
再vue实例中加上store:

路由拦截

之前在路由注册中有添加一个属性
meta: {requireAuth: true}
用来判断当前路由是否需要登录之后才可以访问
接下来就要处理了
在main.js文件中下面添加一个路由跳转拦截:router.beforeEach

路由跳转拦截

因为之前项目使用的token如果页面刷新了vuex里面的token会没有了,这时候我们需要给他重新赋值
在router index.js里 路由注册上面写一个判断:

其实token的存放一直是存放在session中的页面刷新是不会被清除掉的,我第一次使用token的时候也是一脸懵逼,不是到如何下手,然后百度都被我用烂了,他们都是用vuex存的,我不太清除为什么这样存储,可以直接从session中拿吗?又是一个不明所以然

IE兼容

但是我做过的项目都是需要兼容IE,因为Vue使用了ES6 Promise,IE浏览器是不支持的,所以需要用babel-polyfill转换 
安装
npm install --save-dev babel-polyfill
在build文件夹下webpack.config.js下的module.exports中添加:

Path问题

还有一个特别特别重要的问题,项目放到服务器之前需要打包,打完包之后静态文件路径会有一些问题
在config文件夹下index.js文件中有两个环境配置
build:(production 环境) dev:(dev环境)
我们放到服务器上之前都是需要build的,就是在production环境中的assetsPublicPath的配置是错误的需要改正,想当初我刚搞这个vue的时候搞了好久结果就在assetsPublicPath 斜杠前加一个点就ok了,好气啊!!!!

基本上就是这些了,如果我走进了什么误区,望有大佬可以指出,不胜感激!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 207,248评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,681评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,443评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,475评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,458评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,185评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,451评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,112评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,609评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,083评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,163评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,803评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,357评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,357评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,590评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,636评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,925评论 2 344

推荐阅读更多精彩内容