使用vue構(gòu)建移動應用實戰(zhàn)代碼
在移動應用中很多功能都是必不可少的,使用vue構(gòu)建移動應用自然也就需要實現(xiàn)這些功能。之所以寫這篇文章,是希望大家能更多的將注意力放在項目的核心業(yè)務上,而不是過多的關(guān)注通用功能。
基礎設置
- 使用vue-cli搭建項目框架
- 在index.html文件中添加<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport">,在移動端設置禁止縮放,以便顯示合適大小的頁面。
- 如果要將頁面封裝為app,那么需要將config/index.js中build的assetsPublicPath設置為'./',build獲得的頁面可以直接打開,而不需要使用服務器。
通用功能
一、頁面跳轉(zhuǎn)
一般應用都會擁有多個頁面,在vue中通過vue-router來管理頁面。移動應用頁面跳轉(zhuǎn)時,都有轉(zhuǎn)場效果,在vue中我們也可以實現(xiàn)。
在路由文件中設置meta為數(shù)字,meta表示其路由的深度,然后在App.vue中設置:
<template>
<transition :name="transitionName">
<router-view></router-view>
</transition>
</template>
<script>
export default {
name: 'app',
data () {
return {
transitionName: 'fade'
}
},
watch: {
'$route' (to, from) {
let toDepth = to.meta
let fromDepth = from.meta
if (fromDepth > toDepth) {
this.transitionName = 'fade-left'
} else if (fromDepth < toDepth) {
this.transitionName = 'fade-right'
} else {
this.transitionName = 'fade'
}
}
}
}
</script>
<style>
</style>
監(jiān)聽$route,根據(jù)to、from meta值的大小設置不同的跳轉(zhuǎn)動畫。如果應用到多種跳轉(zhuǎn)動畫,可以根據(jù)詳情,具體情況具體應用。

登錄跳轉(zhuǎn)
PS:這里的動畫效果引用自animate.scss;
二、底部導航
直接引用Tabbar組件即可,如果需要添加跳轉(zhuǎn)動畫可以在<router-view></router-view>外設置:
<template>
<div class="content">
<!--<transition name="fade" mode="out-in">-->
<router-view></router-view>
<!--</transition>-->
<Tabbar
:routers="[
{path: '/index/home', icon: 'icon-home', name: '首頁'},
{path: '/index/loading', icon: 'icon-course', name: '加載'},
{path: '/index/message', icon: 'icon-info', name: '信息'}
]"
>
</Tabbar>
</div>
</template>
<script>
export default {
name: 'Index',
components: {Tabbar: require('components/Tabbar')},
data () {
return {
}
}
}
</script>
<style lang="scss" scoped>
.content{
background-color: #eee;
}
</style>
三、數(shù)據(jù)加載
加載數(shù)據(jù)與加載頁面是存在先后順序的,比較通用方法是先加載頁面,顯示數(shù)據(jù)加載效果,在數(shù)據(jù)加載完成之后顯示完整的頁面。數(shù)據(jù)加載效果作為組件添加到應用中,比較繁瑣,所以使用自定義指令的方式實現(xiàn)數(shù)據(jù)加載效果的顯示。

數(shù)據(jù)加載效果
四、接口文件
import fetch from 'isomorphic-fetch'
import store from 'store'
import router from './router'
var env = process.env.NODE_ENV
var rootUrl
if (env === 'development') {
rootUrl = ''
}
if (env === 'production') {
rootUrl = ''
}
const post = function (url, params = {}) {
return fetch(rootUrl + url, {
method: 'post',
headers: {
'Content-type': 'application/json; charset=utf-8',
'Authorization': store.get('token')
},
body: JSON.stringify(params)
}).then(function (res) {
if (res.status === 401) {
// 沒有權(quán)限
api.logout()
} else {
return res.json()
}
})
}
const urls = [
'classAtCurDate' // 普通接口列表
]
var api = {}
for (var url of urls) {
(function (url) {
api[url] = (params) => {
console.log(url)
return post('course/' + url, params)
}
})(url)
}
// 需要特殊處理的接口
api.logout = () => {
store.clearAll()
router.push('login')
}
api.login = (params) => {
store.set('id', 1)
store.set('token', 2)
return Promise.resolve({params})
}
export default api
可以在全局設置,也可以在需要時導入
// 在main.js中導入api接口 import api from '../src/api' Vue.$api = Vue.prototype.$api = api
五、登錄權(quán)限設置
路由加載前,檢查是否有登錄權(quán)限(判斷用戶id是否存在),如果存在直接跳過登錄頁進入首頁,如果不存在在跳轉(zhuǎn)登錄頁。
router.beforeEach((to, from, next) => {
if (cache.get('id') && to.path === '/login') {
next('/index')
} else if (!cache.get('id') && to.path !== '/login') {
next('/login')
} else {
next()
}
})
六、常用第三方組件
許多常用組件都已經(jīng)有了很好的實現(xiàn),在項目開發(fā)中重復造輪子是一件很不明智的事情。vue移動應用有很多合適的庫可以選擇,如mint-ui、vux,這里不一一列舉,想了解更多的可以自行谷歌,或直接到GitHub上搜索,這里已mint-ui為例,講一下比較常用的一些組件。
提示組件
提示組件即顯示信息、提示用戶的組件,toast、alert、 prompt皆為此類。
加載數(shù)據(jù)
如上拉加載數(shù)據(jù)、下拉加載(刷新)數(shù)據(jù)、滾動加載數(shù)據(jù);這些在mint-ui中有較好的實現(xiàn)
日期選擇
比較通用的功能,但自己實現(xiàn)起來還是相對麻煩的,借助第三方組件就可以很快的實現(xiàn)了。
使用第三方組件雖然能夠快速完成項目,但是不建議過度使用,一些常用的組件如按鈕、表單還是應該自己實現(xiàn),一是因為這些組件實現(xiàn)不是很復雜,二是因為往往對這些組件每個應用都有自己的設計要求,使用第三方然后修改樣式,不但比自編寫更復雜而且增加冗余文件。
使用第三方組件庫,一般有兩種導入方式:一是全部導入,這樣會引入很多不必要的文件;二是只導入使用的組件和樣式。建議使用第二種方式,避免導入多余組件,mint-ui可以使用Use babel-plugin-component簡化單獨導入組件的寫法。
GitHub地址:https://github.com/x007xyz/vue-mobile
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- 用Webpack構(gòu)建Vue項目的實踐
- vue-cli構(gòu)建項目使用 less的方法
- 用vue構(gòu)建多頁面應用的示例代碼
- vue基于Element構(gòu)建自定義樹的示例代碼
- 新手vue構(gòu)建單頁面應用實例代碼
- 詳解vue-cli構(gòu)建項目反向代理配置
- 詳解vue-cli 構(gòu)建Vue項目遇到的坑
- 用Vue.extend構(gòu)建消息提示組件的方法實例
- webpack構(gòu)建vue項目的詳細教程(配置篇)
- nodeJS(express4.x)+vue(vue-cli)構(gòu)建前后端分離實例(帶跨域)
- 使用vue構(gòu)建一個上傳圖片表單
- 詳解如何提高 webpack 構(gòu)建 Vue 項目的速度
- 詳解vue項目構(gòu)建與實戰(zhàn)
- 詳解vue項目的構(gòu)建,打包,發(fā)布全過程
相關(guān)文章
vue中實現(xiàn)Monaco Editor自定義提示功能
最近小編接到一個項目,需要在瀏覽器的ide中支持自定義提示功能,接下來通過本文給大家介紹在vue中實現(xiàn)Monaco Editor自定義提示功能,需要的朋友可以參考下2019-07-07
Vue3中當v-if和v-for同時使用時產(chǎn)生的問題和解決辦法
封裝一個組件時,我使用到了v-for和v-if,它們在同一標簽內(nèi),總是提示v-for循環(huán)出來的item在實例中沒有被定義,查詢資料后原因是因為v-for和v-if在同級使用時,v-if優(yōu)先級比v-for高,所以本文給大家介紹了Vue3中當v-if和v-for同時使用時產(chǎn)生的問題和解決辦法2024-07-07
vue.js如何處理數(shù)組對象中某個字段是否變?yōu)閮蓚€字段
這篇文章主要介紹了vue.js如何處理數(shù)組對象中某個字段是否變?yōu)閮蓚€字段方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-03-03
Vue實現(xiàn)數(shù)據(jù)篩選與搜索功能的示例代碼
在許多Web應用程序中,數(shù)據(jù)篩選和搜索是關(guān)鍵的用戶體驗功能,本文將深入探討在Vue中如何進行數(shù)據(jù)篩選與搜索的實現(xiàn),感興趣的小伙伴可以跟隨小編一起學習一下2023-10-10
Vue實現(xiàn)Hover功能(mouseover與mouseenter的區(qū)別及說明)
這篇文章主要介紹了Vue實現(xiàn)Hover功能(mouseover與mouseenter的區(qū)別及說明),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10

