详解搭建一个vue-cli的移动端H5开发模板
简介
vue-mobile是是基于vue-cli实现的移动端H5开发模板,其中已经搭建好基本的开发框架,可帮助您实现快速开发。技术栈:vue+vux+axios+less
源码地址:https://github.com/Michael-lzg/vue-mobile
功能
- 搭建项目目录
- 配置css预处理器
- 配置UI组件库vux
- 解决移动端适配
- 配置页面路由缓存
- axios请求封装
- 工具类函数封装
- toast组件封装
- dialog组件封装
- 底部导航组件封装
- 列表页demo
- 表单页demo
- 搭建项目目录
按如下文件目录搭建项目框架
src主要源码目录 |--assets静态资源,统一管理 |--components公用组件,全局组件 |--javascriptJS相关操作处理 |--ajaxaxios封装的请求拦截 |--utils全局封装的工具类 |--datas模拟数据,临时存放 |--router路由,统一管理 |--storevuex,统一管理 |--views视图目录
配置css预处理器
1.安装依赖
npminstalllessless-loader--sava-dev
2.在build/webpack.base.conf.js里参照如下代码进行配置
{
test:/\.less$/,
loader:"style-loader!css-loader!less-loader"
}
配置vux
1.安装依赖
npminstallvuxvux-loader--save
2.在build/webpack.base.conf.js里参照如下代码进行配置
constvuxLoader=require('vux-loader')//把vux-loader引入
module.exports=vuxLoader.merge(webpackConfig,{
//把新旧配置进行merge(放到页面最底部)
plugins:['vux-ui']
})
3.局部注册使用
import{Group,Cell}from'vux'//引入所需组件 exportdefault{ name:'App', components:{ //注册组件 Group, Cell } }
移动端适配
1.安装依赖
npminstallpx2rem-loader--save-dev
2.在build/utils进行如下配置
constpx2remLoader={
loader:'px2rem-loader',
options:{
remUnit:100
}
}
functiongenerateLoaders(loader,loaderOptions){
constloaders=options.usePostCSS?[cssLoader,postcssLoader,px2remLoader]:[cssLoader,px2remLoader]
if(loader){
loaders.push({
loader:loader+'-loader',
options:Object.assign({},loaderOptions,{
sourceMap:options.sourceMap
})
})
}
//ExtractCSSwhenthatoptionisspecified
//(whichisthecaseduringproductionbuild)
if(options.extract){
returnExtractTextPlugin.extract({
use:loaders,
fallback:'vue-style-loader'
})
}else{
return['vue-style-loader'].concat(loaders)
}
}
3.在main.js设置html跟字体大小
letcale=window.screen.availWidth>750?2:window.screen.availWidth/375
window.document.documentElement.style.fontSize=`${100*cale}px`
这是最简单的适配方法,后续跟单独对移动端rem适配做详细解读。
路由配置
1.通过配置路由对象的meta[keepAlive]值来区分页面是否需要缓存
routes:[
{
path:'/',
name:'index',
meta:{keepAlive:true},//需要缓存
component:resolve=>{
require(['../views/index'],resolve)
}
},
{
path:'/list',
name:'listr',
meta:{keepAlive:false},//不需要缓存
component:resolve=>{
require(['../views/list'],resolve)
}
}
]
2.在app.vue做缓存判断
axios请求封装
1.设置请求拦截和响应拦截
constPRODUCT_URL='https://xxxx.com'
constMOCK_URL='http://xxxx.com'
lethttp=axios.create({
baseURL:process.env.NODE_ENV==='production'?PRODUCT_URL:MOCK_URL
})
//请求拦截器
http.interceptors.request.use(
config=>{
//设置token,Content-Type
vartoken=sessionStorage.getItem('UserLoginToken')
config.headers['token']=token
config.headers['Content-Type']='application/json;charset=UTF-8'
//请求显示loading效果
if(config.loading===true){
vm.$loading.show()
}
returnconfig
},
error=>{
vm.$loading.hide()
returnPromise.reject(error)
}
)
//响应拦截器
http.interceptors.response.use(
res=>{
vm.$loading.hide()
//token失效,重新登录
if(res.data.code===401){
//重新登录
}
returnres
},
error=>{
vm.$loading.hide()
returnPromise.reject(error)
}
)
2.封装get和post请求方法
functionget(url,data,lodaing){
returnnewPromise((resolve,reject)=>{
http
.get(url)
.then(
response=>{
resolve(response)
},
err=>{
reject(err)
}
)
.catch(error=>{
reject(error)
})
})
}
functionpost(url,data,loading){
returnnewPromise((resolve,reject)=>{
http
.post(url,data,{loading:loading})
.then(
response=>{
resolve(response)
},
err=>{
reject(err)
}
)
.catch(error=>{
reject(error)
})
})
}
export{get,post}
3.把get,post方法挂载到vue实例上。
//main.js
import{get,post}from'./js/ajax'
Vue.prototype.$http={get,post}
工具类函数封装
添加方法到vue实例的原型链上
exportdefault{
install(Vue,options){
Vue.prototype.util={
method1(val){
...
},
method2(val){
...
},
}
}
2.在main.js通过vue.use()注册
importutilsfrom'./js/utils' Vue.use(utils)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。