vue-mobile 是是基於 vue-cli 實現的移動端 H5 開發模板,其中已經搭建好基本的開發框架,可幫助您實現快速開發。 技術棧:vue + vux + axios + lessjavascript
源碼地址:github.com/Michael-lzg…css
按以下文件目錄搭建項目框架html
src 主要源碼目錄
|-- assets 靜態資源,統一管理
|-- components 公用組件,全局組件
|-- javascript JS相關操做處理
|-- ajax axios封裝的請求攔截
|-- utils 全局封裝的工具類
|-- datas 模擬數據,臨時存放
|-- router 路由,統一管理
|-- store vuex, 統一管理
|-- views 視圖目錄
複製代碼
npm install less less-loader --sava-dev
複製代碼
{
test: /\.less$/,
loader: "style-loader!css-loader!less-loader"
}
複製代碼
npm install vux vux-loader --save
複製代碼
const vuxLoader = require('vux-loader') //把vux-loader引入
module.exports = vuxLoader.merge(webpackConfig, {
//把新舊配置進行merge(放到頁面最底部)
plugins: ['vux-ui']
})
複製代碼
;<group> <cell title="title" value="value" /> </group> import { Group, Cell } from 'vux' //引入所需組件 export default { name: 'App', components: { //註冊組件 Group, Cell } } 複製代碼
npm install px2rem-loader --save-dev
複製代碼
const px2remLoader = {
loader: 'px2rem-loader',
options: {
remUnit: 100
}
}
function generateLoaders(loader, loaderOptions) {
const loaders = options.usePostCSS ? [cssLoader, postcssLoader, px2remLoader] : [cssLoader, px2remLoader]
if (loader) {
loaders.push({
loader: loader + '-loader',
options: Object.assign({}, loaderOptions, {
sourceMap: options.sourceMap
})
})
}
// Extract CSS when that option is specified
// (which is the case during production build)
if (options.extract) {
return ExtractTextPlugin.extract({
use: loaders,
fallback: 'vue-style-loader'
})
} else {
return ['vue-style-loader'].concat(loaders)
}
}
複製代碼
let cale = window.screen.availWidth > 750 ? 2 : window.screen.availWidth / 375
window.document.documentElement.style.fontSize = `${100 * cale}px`
複製代碼
這是最簡單的適配方法,後續跟單獨對移動端 rem 適配作詳細解讀。前端
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)
}
}
]
複製代碼
<div id="app">
<router-view v-if="!$route.meta.keepAlive"></router-view>
<keep-alive>
<router-view v-if="$route.meta.keepAlive"></router-view>
</keep-alive>
</div>
複製代碼
const PRODUCT_URL = 'https://xxxx.com'
const MOCK_URL = 'http://xxxx.com'
let http = axios.create({
baseURL: process.env.NODE_ENV === 'production' ? PRODUCT_URL : MOCK_URL
})
// 請求攔截器
http.interceptors.request.use(
config => {
// 設置token,Content-Type
var token = sessionStorage.getItem('UserLoginToken')
config.headers['token'] = token
config.headers['Content-Type'] = 'application/json;charset=UTF-8'
// 請求顯示loading效果
if (config.loading === true) {
vm.$loading.show()
}
return config
},
error => {
vm.$loading.hide()
return Promise.reject(error)
}
)
// 響應攔截器
http.interceptors.response.use(
res => {
vm.$loading.hide()
// token失效,從新登陸
if (res.data.code === 401) {
// 從新登陸
}
return res
},
error => {
vm.$loading.hide()
return Promise.reject(error)
}
)
複製代碼
function get(url, data, lodaing) {
return new Promise((resolve, reject) => {
http
.get(url)
.then(
response => {
resolve(response)
},
err => {
reject(err)
}
)
.catch(error => {
reject(error)
})
})
}
function post(url, data, loading) {
return new Promise((resolve, reject) => {
http
.post(url, data, { loading: loading })
.then(
response => {
resolve(response)
},
err => {
reject(err)
}
)
.catch(error => {
reject(error)
})
})
}
export { get, post }
複製代碼
// main.js
import { get, post } from './js/ajax'
Vue.prototype.$http = { get, post }
複製代碼
export default {
install (Vue, options) {
Vue.prototype.util = {
method1(val) {
...
},
method2 (val) {
...
},
}
}
複製代碼
import utils from './js/utils'
Vue.use(utils)
複製代碼
在開發項目過程當中,一般會用到不少功能和設計相相似的組件,爲了不重複造輪子,咱們常常會用到一些第三方組件,好比 vux,vant。可是這樣會引入太多沒用到的組件,形成打包體積過大。因此咱們有必要封裝一些基礎的組件用於開發。vue
toast 和 dialog 組件封裝 toast 和 dialog 組件基本是每個移動端項目都會用到的,下面我將介紹如何封裝這兩個組件,併發布到 npm 供下載使用。java
必備知識儲備webpack
最終咱們要達到這樣的效果,從 npm 下載依賴包,直接調用ios
this.$toast({ msg: '手機號碼不能爲空' })
this.$toast({
msg: '成功提示',
type: 'success'
})
this.$dialog({
title: '刪除提示',
text: '是否肯定刪除此標籤?',
showCancelBtn: true,
confirmText: '確認',
confirm(content) {
alert('刪除成功')
}
})
複製代碼
效果圖以下。具體封裝過程可參考文章:git