最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用vue構(gòu)建移動(dòng)應(yīng)用實(shí)戰(zhàn)代碼

 更新時(shí)間:2017年08月02日 16:12:11   作者:markdown  
本篇文章主要介紹了使用vue構(gòu)建移動(dòng)應(yīng)用實(shí)戰(zhàn)代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

在移動(dòng)應(yīng)用中很多功能都是必不可少的,使用vue構(gòu)建移動(dòng)應(yīng)用自然也就需要實(shí)現(xiàn)這些功能。之所以寫(xiě)這篇文章,是希望大家能更多的將注意力放在項(xiàng)目的核心業(yè)務(wù)上,而不是過(guò)多的關(guān)注通用功能。

基礎(chǔ)設(shè)置

  1. 使用vue-cli搭建項(xiàng)目框架
  2. 在index.html文件中添加<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport">,在移動(dòng)端設(shè)置禁止縮放,以便顯示合適大小的頁(yè)面。
  3. 如果要將頁(yè)面封裝為app,那么需要將config/index.js中build的assetsPublicPath設(shè)置為'./',build獲得的頁(yè)面可以直接打開(kāi),而不需要使用服務(wù)器。

通用功能

一、頁(yè)面跳轉(zhuǎn)

一般應(yīng)用都會(huì)擁有多個(gè)頁(yè)面,在vue中通過(guò)vue-router來(lái)管理頁(yè)面。移動(dòng)應(yīng)用頁(yè)面跳轉(zhuǎn)時(shí),都有轉(zhuǎn)場(chǎng)效果,在vue中我們也可以實(shí)現(xiàn)。

在路由文件中設(shè)置meta為數(shù)字,meta表示其路由的深度,然后在App.vue中設(shè)置:

<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)聽(tīng)$route,根據(jù)to、from meta值的大小設(shè)置不同的跳轉(zhuǎn)動(dòng)畫(huà)。如果應(yīng)用到多種跳轉(zhuǎn)動(dòng)畫(huà),可以根據(jù)詳情,具體情況具體應(yīng)用。

登錄跳轉(zhuǎn)

PS:這里的動(dòng)畫(huà)效果引用自animate.scss;

二、底部導(dǎo)航

直接引用Tabbar組件即可,如果需要添加跳轉(zhuǎn)動(dòng)畫(huà)可以在<router-view></router-view>外設(shè)置:

<template>
 <div class="content">
  <!--<transition name="fade" mode="out-in">-->
   <router-view></router-view>
  <!--</transition>-->
  <Tabbar 
   :routers="[
    {path: '/index/home', icon: 'icon-home', name: '首頁(yè)'},
    {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ù)與加載頁(yè)面是存在先后順序的,比較通用方法是先加載頁(yè)面,顯示數(shù)據(jù)加載效果,在數(shù)據(jù)加載完成之后顯示完整的頁(yè)面。數(shù)據(jù)加載效果作為組件添加到應(yīng)用中,比較繁瑣,所以使用自定義指令的方式實(shí)現(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) {
   // 沒(méi)有權(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

可以在全局設(shè)置,也可以在需要時(shí)導(dǎo)入

// 在main.js中導(dǎo)入api接口
import api from '../src/api'
Vue.$api = Vue.prototype.$api = api

五、登錄權(quán)限設(shè)置

路由加載前,檢查是否有登錄權(quán)限(判斷用戶id是否存在),如果存在直接跳過(guò)登錄頁(yè)進(jìn)入首頁(yè),如果不存在在跳轉(zhuǎn)登錄頁(yè)。

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)有了很好的實(shí)現(xiàn),在項(xiàng)目開(kāi)發(fā)中重復(fù)造輪子是一件很不明智的事情。vue移動(dòng)應(yīng)用有很多合適的庫(kù)可以選擇,如mint-ui、vux,這里不一一列舉,想了解更多的可以自行谷歌,或直接到GitHub上搜索,這里已mint-ui為例,講一下比較常用的一些組件。

提示組件

提示組件即顯示信息、提示用戶的組件,toast、alert、 prompt皆為此類(lèi)。

加載數(shù)據(jù)

如上拉加載數(shù)據(jù)、下拉加載(刷新)數(shù)據(jù)、滾動(dòng)加載數(shù)據(jù);這些在mint-ui中有較好的實(shí)現(xiàn)

日期選擇

比較通用的功能,但自己實(shí)現(xiàn)起來(lái)還是相對(duì)麻煩的,借助第三方組件就可以很快的實(shí)現(xiàn)了。

使用第三方組件雖然能夠快速完成項(xiàng)目,但是不建議過(guò)度使用,一些常用的組件如按鈕、表單還是應(yīng)該自己實(shí)現(xiàn),一是因?yàn)檫@些組件實(shí)現(xiàn)不是很復(fù)雜,二是因?yàn)橥鶎?duì)這些組件每個(gè)應(yīng)用都有自己的設(shè)計(jì)要求,使用第三方然后修改樣式,不但比自編寫(xiě)更復(fù)雜而且增加冗余文件。

使用第三方組件庫(kù),一般有兩種導(dǎo)入方式:一是全部導(dǎo)入,這樣會(huì)引入很多不必要的文件;二是只導(dǎo)入使用的組件和樣式。建議使用第二種方式,避免導(dǎo)入多余組件,mint-ui可以使用Use babel-plugin-component簡(jiǎn)化單獨(dú)導(dǎo)入組件的寫(xiě)法。

GitHub地址:https://github.com/x007xyz/vue-mobile

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue實(shí)現(xiàn)簡(jiǎn)單選項(xiàng)卡功能

    Vue實(shí)現(xiàn)簡(jiǎn)單選項(xiàng)卡功能

    這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)簡(jiǎn)單選項(xiàng)卡功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • vue中實(shí)現(xiàn)Monaco Editor自定義提示功能

    vue中實(shí)現(xiàn)Monaco Editor自定義提示功能

    最近小編接到一個(gè)項(xiàng)目,需要在瀏覽器的ide中支持自定義提示功能,接下來(lái)通過(guò)本文給大家介紹在vue中實(shí)現(xiàn)Monaco Editor自定義提示功能,需要的朋友可以參考下
    2019-07-07
  • Vue3中當(dāng)v-if和v-for同時(shí)使用時(shí)產(chǎn)生的問(wèn)題和解決辦法

    Vue3中當(dāng)v-if和v-for同時(shí)使用時(shí)產(chǎn)生的問(wèn)題和解決辦法

    封裝一個(gè)組件時(shí),我使用到了v-for和v-if,它們?cè)谕粯?biāo)簽內(nèi),總是提示v-for循環(huán)出來(lái)的item在實(shí)例中沒(méi)有被定義,查詢資料后原因是因?yàn)関-for和v-if在同級(jí)使用時(shí),v-if優(yōu)先級(jí)比v-for高,所以本文給大家介紹了Vue3中當(dāng)v-if和v-for同時(shí)使用時(shí)產(chǎn)生的問(wèn)題和解決辦法
    2024-07-07
  • vue.js如何處理數(shù)組對(duì)象中某個(gè)字段是否變?yōu)閮蓚€(gè)字段

    vue.js如何處理數(shù)組對(duì)象中某個(gè)字段是否變?yōu)閮蓚€(gè)字段

    這篇文章主要介紹了vue.js如何處理數(shù)組對(duì)象中某個(gè)字段是否變?yōu)閮蓚€(gè)字段方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • Vue lazyload圖片懶加載實(shí)例詳解

    Vue lazyload圖片懶加載實(shí)例詳解

    本文通過(guò)實(shí)例代碼給大家介紹了Vue lazyload圖片懶加載的相關(guān)知識(shí),通過(guò)導(dǎo)入配置等操作src/main.jswenj ,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-12-12
  • Vue實(shí)現(xiàn)數(shù)據(jù)篩選與搜索功能的示例代碼

    Vue實(shí)現(xiàn)數(shù)據(jù)篩選與搜索功能的示例代碼

    在許多Web應(yīng)用程序中,數(shù)據(jù)篩選和搜索是關(guān)鍵的用戶體驗(yàn)功能,本文將深入探討在Vue中如何進(jìn)行數(shù)據(jù)篩選與搜索的實(shí)現(xiàn),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-10-10
  • Vue2.0 UI框架ElementUI使用方法詳解

    Vue2.0 UI框架ElementUI使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了Vue2.0 UI框架ElementUI的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Vue項(xiàng)目實(shí)現(xiàn)html5圖片上傳的示例代碼

    Vue項(xiàng)目實(shí)現(xiàn)html5圖片上傳的示例代碼

    本文主要介紹了Vue項(xiàng)目?html5圖片上傳,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Vue實(shí)現(xiàn)Hover功能(mouseover與mouseenter的區(qū)別及說(shuō)明)

    Vue實(shí)現(xiàn)Hover功能(mouseover與mouseenter的區(qū)別及說(shuō)明)

    這篇文章主要介紹了Vue實(shí)現(xiàn)Hover功能(mouseover與mouseenter的區(qū)別及說(shuō)明),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • vant的picker的坑及解決

    vant的picker的坑及解決

    這篇文章主要介紹了vant的picker的坑及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12

最新評(píng)論

加查县| 上思县| 鄂托克前旗| 关岭| 江山市| 石棉县| 阿克陶县| 沅江市| 民和| 丹东市| 桦甸市| 广德县| 武山县| 昌平区| 呼和浩特市| 隆安县| 汝阳县| 固镇县| 金寨县| 怀安县| 建水县| 涪陵区| 古蔺县| 肥东县| 阿荣旗| 兴业县| 兴国县| 抚宁县| 汝州市| 班戈县| 郎溪县| 綦江县| 滦南县| 肥东县| 巴南区| 昌平区| 杭锦后旗| 武隆县| 汉阴县| 淮阳县| 麻江县|