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

mpvue 項(xiàng)目初始化及實(shí)現(xiàn)授權(quán)登錄的實(shí)現(xiàn)方法

 更新時(shí)間:2020年07月20日 11:47:12   作者:JJYin  
這篇文章主要介紹了mpvue 項(xiàng)目初始化及實(shí)現(xiàn)授權(quán)登錄的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

mpvue

mpvue是一個(gè)使用vue.js開發(fā)小程序的框架。其官網(wǎng) http://mpvue.com/ 的介紹是,mpvue框架基于Vue.js核心,mpvue修改了Vue.js的runtime和compiler實(shí)現(xiàn),使其可以運(yùn)行在小程序環(huán)境中,從而為小程序開發(fā)引入了整套Vue.js開發(fā)體驗(yàn)。

使用mpvue框架開發(fā)小程序,能夠直接使用vue語法進(jìn)行開發(fā)。

Vant Weapp

Vant Weapp是一套小程序UI組件庫,可以使用這個(gè)UI庫封裝好的一些組件來實(shí)現(xiàn)某些功能,類似element組件的引入使用。

flyio

github: https://github.com/wendux/fly

Flyio幫助文檔: https://wendux.github.io/dist/#/doc/flyio/readme

如官網(wǎng)所說,F(xiàn)ly.js是一個(gè)支持所有JavaScript運(yùn)行環(huán)境的基于Promise、支持請(qǐng)求轉(zhuǎn)發(fā)的http請(qǐng)求庫,它可最大限度地在多個(gè)端上實(shí)現(xiàn)代碼復(fù)用。

其擁有的特點(diǎn):

1、提供統(tǒng)一的PromiseAPI

2、瀏覽器環(huán)境下非常輕量

3、支持多種JavaScript運(yùn)行環(huán)境

4、支持請(qǐng)求/響應(yīng)攔截器

5、自動(dòng)轉(zhuǎn)換JSON數(shù)據(jù)

6、支持切換底層 HTTP Engine,可輕松適配各種運(yùn)行環(huán)境

7、瀏覽器端支持全局Ajax攔截

8、H5頁面內(nèi)嵌到原生APP時(shí),支持將HTTP請(qǐng)求轉(zhuǎn)發(fā)到Native,支持直接請(qǐng)求圖片

本次搭建的小程序環(huán)境,將使用flyio這個(gè)http請(qǐng)求庫來實(shí)現(xiàn)數(shù)據(jù)的請(qǐng)求,目前用到的方法為get、post。

兩者的使用示例在官網(wǎng)幫助文檔有示例:

項(xiàng)目初始化

1、搭建mpvue腳手架

基于mpvue-quickstart模版創(chuàng)建新項(xiàng)目

vue init mpvue/mpvue-quickstart one_hour_app

2、打開并跑起項(xiàng)目

新建的項(xiàng)目打開,dist文件夾尚未存在

跑起項(xiàng)目

cd one_hour_app
npm run dev

這樣跑起來后項(xiàng)目中便多了一個(gè)dist文件夾,里面有個(gè)wx文件夾

這個(gè)wx文件夾就是要導(dǎo)入到微信開發(fā)者工具中的文件。

安裝微信開發(fā)者工具,打開微信官網(wǎng)文檔頁面可下載: https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html

安裝好微信開發(fā)者工具后點(diǎn)擊導(dǎo)入項(xiàng)目

彈窗內(nèi)輸入導(dǎo)入的目錄

目錄就是剛才說的那個(gè)在one_hour_app項(xiàng)目中npm run dev之后生成的dist下的wx。AppID的獲取,需要先在微信公眾平臺(tái)注冊(cè),然后打開開發(fā)-開發(fā)設(shè)置找到。

導(dǎo)入成功后顯示這樣

這樣,就可以在編輯器寫我們的代碼,然后在微信開發(fā)者工具里面可以像瀏覽器一樣查看頁面效果。

查看項(xiàng)目vue文件可以發(fā)現(xiàn),我們基本上可以像寫vue一樣寫里面的vue文件。

之后對(duì)項(xiàng)目結(jié)構(gòu)進(jìn)行刪減,把原本提供的那些沒用到的文件先刪除。保留一個(gè)架構(gòu)。開發(fā)主要關(guān)注的是src這個(gè)目錄。

statics里面的images、tabs刪掉

src/main.js保持不變

src/App.vue里的代碼刪掉,剩下

src/app.json對(duì)應(yīng)到頁面路由pages配置、頭部windows的樣式和文字設(shè)置、腳部tabBar菜單配置,現(xiàn)在只保留如下:

src/utils文件先保持不變

src/components/card.vue刪掉

src/pages只留下index那塊的內(nèi)容。接著是刪掉index.vue的東西。

修整完后,只剩下首頁

至此,基于mpvue的小程序項(xiàng)目架構(gòu)已經(jīng)搭建好了。

接著是css擴(kuò)展語言scss、Vant Weapp UI組件庫、flyio、mpvue路由插件mpvue-router-patch。

1、安裝scss,sass-loader的版本是7.3.1,如果使用最新的版本會(huì)報(bào)錯(cuò),這里安裝這個(gè)低版本的。

npm i -D sass-loader node-sass

測(cè)試下:

2、安裝Vant Weapp

npm i vant-weapp -S --production

打開Vant Weapp的官網(wǎng)找一個(gè)button的例子測(cè)試下,但是使用之前需要在app.json文件中配置引入組件。

由于把這個(gè)組件安裝到了node_modules/vant-weapp/dist,

所以引入組件的路徑跟官網(wǎng)給的不一樣,需要手動(dòng)修改一下路徑:

同時(shí)由于我們需要在微信開發(fā)者工具查看,而那里導(dǎo)入了的是dist/wx,跟編輯器里的目錄是不一樣的,所以為了能在微信開發(fā)者工具正常顯示組件,還需要做一個(gè)配置,將整個(gè)node_modules/vant-weapp/dist目錄拷貝到dist/wx/vant-weapp/dist目錄,在wepack.base.conf.js添加如下配置:

if (/^wx$/.test(PLATFORM)) {
 baseWebpackConfig = merge(baseWebpackConfig, {
  plugins: [
   new CopyWebpackPlugin([{
    from: resolve('node_modules/vant-weapp/dist'),
    to: resolve('dist/wx/vant-weapp/dist'),
    ignore: ['.*']
   }])
  ]
 })
}

使用一個(gè)button組件測(cè)試下:

<van-button type="primary">主要按鈕</van-button>

這樣組件就成功引入了,而且也可以看到剛才那個(gè)拷貝目錄的配置也生效了,可以看到vant-weapp目錄已在wx里生成。

3、安裝flyio、mpvue-router-push

npm i -S flyio
npm i -S mpvue-router-patch

現(xiàn)在用不到這個(gè)路由插件,先安裝著放著。

接著是使用flyio來實(shí)現(xiàn)小程序授權(quán)登錄的請(qǐng)求。

首先在utils里創(chuàng)建request.js用來封裝flyio的請(qǐng)求。

// 初始化flyio請(qǐng)求
function createFly () {
 if (mpvuePlatform === 'wx') {
  const Fly = require('flyio/dist/npm/wx')
  return new Fly()
 } else {
  return null
 }
}
// 處理get請(qǐng)求、post請(qǐng)求,
//如果是post,就把get改成post就行,這里為了節(jié)省篇幅,省去了post的那段代碼
export function get (url, params = {}, showErr = true) {
 const fly = new createFly()
 if (fly) {
  return new Promise((resolve, reject) => {
   fly.get(url, params).then(response => {
    const data = (response && response.data) || {}
    if (data.error_code === 0) {
     resolve(response)
     console.log(response)
    } else {
     if (showErr) {
      mpvue.showToast({
       title: data.msg || '請(qǐng)求失敗',
       icon: 'none',
       duration: 1500
      });
     }
     reject(response)
    }
   }).catch(err => {
    console.log(err)
   })
  })
 }
}

如果遇到了 TypeError: __webpack_require__(...) is not a function這樣的問題,就關(guān)閉微信開發(fā)者工具,刪除dist包,再重新npm run dev跑一下,重新打開微信開發(fā)者工具應(yīng)該就沒問題了。

接下來是用戶授權(quán)的內(nèi)容。

授權(quán)登錄

首頁的展示,需要調(diào)用mpvue.getSetting獲取用戶的當(dāng)前設(shè)置。已授權(quán)就展示正常頁面,未授權(quán)就展示auth.vue授權(quán)登錄頁面。

未授權(quán)的狀態(tài),當(dāng)用戶同意授權(quán)使用的時(shí)候,這時(shí)首頁就會(huì)變成正常的頁面,同時(shí),需要獲取用戶的信息userInfo。

在成功獲取了用戶信息之后,需要使用存儲(chǔ)器mpvue.setStorageSync把它存儲(chǔ)起來供之后需要的時(shí)候使用getStorageSync來獲取。這時(shí)會(huì)存在兩種情況,一種是已存在openId的情況,另一種是還沒獲取openId的情況。

當(dāng)未取到openId時(shí),需要調(diào)用接口獲取openId,而調(diào)用這個(gè)接口需要獲得code,這個(gè)code可以通過mpvue.login API獲取到。當(dāng)取得code之后就調(diào)用獲取openId的接口,返回openId并存儲(chǔ)起來。取得openId后,就可以把這個(gè)openId作為參數(shù),傳給獲取首頁數(shù)據(jù)的接口。

當(dāng)已經(jīng)取得openId時(shí),就直接調(diào)用首頁接口數(shù)據(jù)并傳openId作為接口的參數(shù)。

在此之后,需要調(diào)用register注冊(cè)接口,調(diào)用這個(gè)接口能夠把用戶的行為數(shù)據(jù)存儲(chǔ)在后臺(tái),辨別不同的用戶。

流程示意圖:

auth.vue組件主要的按鈕事件:

<button class="auth-btn" 
       open-type="getUserInfo"
       @getuserinfo="getUserInfo">授權(quán)登錄</button>
getUserInfo () {
   this.$emit('getUserInfo')
  }

src/api/index.js用來存放接口

import { get, post } from "@/utils/request.js"
const API_BASE = '后臺(tái)接口前綴'

export function getOpenId (params) {
 return get(`${API_BASE}/openId/get`, params)
}

export function getHomeData (params) {
 return get(`${API_BASE}/book/home/v2`, params)
}

export function register (params) {
 return post(`${API_BASE}/user/register`, params)
}

src/api/wechat.js用來存放微信平臺(tái)相關(guān)的API

import { getOpenId } from '@/api'
const APP_ID = '填寫微信公眾平臺(tái)的App_ID'
const SECRET = '填寫微信公眾平臺(tái)的secret'

// 請(qǐng)求getSetting獲取用戶當(dāng)前的授權(quán)
export function getSetting (auth, onSuccess, onFail) {
 mpvue.getSetting({
  success (res) {
   if (res.authSetting[`scope.${auth}`]) {
    onSuccess(res)
   } else {
    onFail(res)
   }
  },
  fail (res) {
   console.log(res)
  }
 })
}
// 獲取用戶信息
export function getUserInfo (onSuccess, onFail) {
 mpvue.getUserInfo({
  success (res) {
   onSuccess(res)
   console.log(res)
  },
  fail (res) {
   onFail(res)
  }
 })
}
// 獲取openId
export function getUserOpenId (callback) {
 mpvue.login({  // 調(diào)用login API 獲得code
  success (res) {
   console.log(res)
   const { code } = res // 這個(gè)code是獲取openId的前提
   getOpenId({ code, appId: APP_ID, secret: SECRET }).then(response => {
    const { openid } = response.data.data
    mpvue.setStorageSync('openId', openid)
    callback && callback(openid)
   }).catch(err => {
    console.log(err)
   })
  },
  fail (res) {
   console.log(res)
  }
 })
}

index.vue頁面:

<template>
 <div>
  <div v-if="isAuth">
   <div class="index">首頁</div>
   <van-button type="primary">主要按鈕</van-button>
   <div>
    獲取userInfo示例:
    <div>
     {{ userInfo.nickName }}
    </div>
    獲取homeData數(shù)據(jù)示例:
    <div>{{ homeData.hotSearch && homeData.hotSearch.num }}</div>
   </div>
  </div>
  <auth v-if="!isAuth" @getUserInfo="init" />
 </div>
</template>
import { get, post } from '@/utils/request'
import Auth from '@/components/base/auth.vue'
import { getHomeData, register } from '@/api'
import { getSetting, getUserInfo, getUserOpenId } from '@/api/wechat'
 data () {
  return {
   isAuth: false,
   userInfo: {},
   homeData: {}
  }
 },
 mounted () {
  this.init()
 },
// 獲取首頁數(shù)據(jù)
getIndexData (openId, userInfo) {
  getHomeData({ openId }).then(response => {
    console.log('getHomeData-----', response)
    this.homeData = response.data.data
  })
},
// 在獲得授權(quán)信息后調(diào)用以獲得用戶信息
getUserInfoData () {
  const onCompleteGetOpenId = (openId, userInfo) => {
    this.getIndexData(openId, userInfo) // 獲取首頁數(shù)據(jù)
    register({ openId, platform: mpvuePlatform, ...userInfo }) // 注冊(cè)
  } 
  getUserInfo( // 獲取用戶信息
    (res) => {
      const { userInfo } = res
      this.userInfo = userInfo
      mpvue.getStorageSync('userInfo', userInfo)
      const openId = mpvue.getStorageSync('openId')
      if (!openId || openId.length === 0) { // 未存在openId
        getUserOpenId((openId) => { // 需要請(qǐng)求接口獲得
          onCompleteGetOpenId(openId, userInfo)
        })
      } else {
        onCompleteGetOpenId(openId, userInfo) // 已存在openId
      }
    },
    (res) => {
      console.log(res)
    }
  )
}
 // 一開始就需要獲取授權(quán)信息,mounted里調(diào)用
init () {
  getSetting(
    'userInfo',
    (res) => {
      this.isAuth = true
      console.log(res)
      this.getUserInfoData()
    },
    (res) => {
      this.isAuth = false
      console.log(res)
    }
  )
}

最后放上授權(quán)的過程示意圖:

到此這篇關(guān)于mpvue 項(xiàng)目初始化及實(shí)現(xiàn)授權(quán)登錄的實(shí)現(xiàn)方法的文章就介紹到這了,更多相關(guān)mpvue 項(xiàng)目初始化及授權(quán)登錄內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue獲取當(dāng)前系統(tǒng)日期(年月日)的示例代碼

    Vue獲取當(dāng)前系統(tǒng)日期(年月日)的示例代碼

    發(fā)中會(huì)有要獲取當(dāng)前日期的需求,有的是獲取到當(dāng)前月份,有的是精確到分秒,在 Vue 開發(fā)中,獲取當(dāng)前時(shí)間是一項(xiàng)常見的需求,本文將深入探討Vue獲取當(dāng)前系統(tǒng)日期(年月日),幫助您更好地利用當(dāng)前時(shí)間,需要的朋友可以參考下
    2024-01-01
  • 應(yīng)用provide與inject刷新Vue頁面方法

    應(yīng)用provide與inject刷新Vue頁面方法

    這篇文章主要介紹了應(yīng)用provide與inject刷新Vue頁面的兩種方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,多多進(jìn)步,祝大家早日升職加薪
    2021-09-09
  • Vue一次性簡(jiǎn)潔明了引入所有公共組件的方法

    Vue一次性簡(jiǎn)潔明了引入所有公共組件的方法

    這篇文章主要介紹了Vue一次性簡(jiǎn)潔明了引入所有公共組件的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-11-11
  • Vue.js中的計(jì)算屬性、監(jiān)視屬性與生命周期詳解

    Vue.js中的計(jì)算屬性、監(jiān)視屬性與生命周期詳解

    最近在學(xué)習(xí)vue,學(xué)習(xí)中遇到了一些感覺挺重要的知識(shí)點(diǎn),感覺有必要整理下來,這篇文章主要給大家介紹了關(guān)于Vue.js中計(jì)算屬性、監(jiān)視屬性與生命周期的相關(guān)資料,需要的朋友可以參考下
    2021-06-06
  • Vue中computed屬性和watch,methods的區(qū)別

    Vue中computed屬性和watch,methods的區(qū)別

    本文主要介紹了Vue中computed屬性和watch,methods的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • vue3中使用props和emits并指定其類型與默認(rèn)值

    vue3中使用props和emits并指定其類型與默認(rèn)值

    props是Vue3中的一個(gè)重要概念,它允許我們將數(shù)據(jù)從父組件傳遞到子組件,下面這篇文章主要給大家介紹了關(guān)于vue3中使用props和emits并指定其類型與默認(rèn)值的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • Vue3封裝localStorage基本使用示例詳解

    Vue3封裝localStorage基本使用示例詳解

    localStorage 和 sessionStorage 屬性允許在瀏覽器中存儲(chǔ) key/value 對(duì)的數(shù)據(jù),localStorage 用于長(zhǎng)久保存整個(gè)網(wǎng)站的數(shù)據(jù),保存的數(shù)據(jù)沒有過期時(shí)間,直到手動(dòng)去刪除,本文給大家介紹Vue3封裝localStorage-基本使用,感興趣的朋友一起看看吧
    2023-12-12
  • 基于Vue實(shí)現(xiàn)手勢(shì)簽名

    基于Vue實(shí)現(xiàn)手勢(shì)簽名

    這篇文章主要為大家詳細(xì)介紹了基于Vue實(shí)現(xiàn)手勢(shì)簽名,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • VUE+elementui面包屑實(shí)現(xiàn)動(dòng)態(tài)路由詳解

    VUE+elementui面包屑實(shí)現(xiàn)動(dòng)態(tài)路由詳解

    今天小編就為大家分享一篇VUE+elementui面包屑實(shí)現(xiàn)動(dòng)態(tài)路由詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • vscode中使用vue的一些插件總結(jié)(方便開發(fā))

    vscode中使用vue的一些插件總結(jié)(方便開發(fā))

    對(duì)于很多使用vscode編寫vue項(xiàng)目的新手同學(xué)來說,可能不知道使用什么插件,下面這篇文章主要給大家介紹了關(guān)于vscode中使用vue的一些插件,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11

最新評(píng)論

武邑县| 弋阳县| 滨州市| 庆元县| 中江县| 兴和县| 营口市| 青阳县| 方城县| 巫溪县| 渑池县| 东阳市| 牙克石市| 云龙县| 凭祥市| 五河县| 宿松县| 富阳市| 达尔| 新邵县| 扬中市| 梁河县| 海门市| 斗六市| 辉南县| 青川县| 黑山县| 韶山市| 徐水县| 常州市| 鹤壁市| 香港 | 临泽县| 嘉鱼县| 资中县| 铜川市| 佛坪县| 商洛市| 阳春市| 社旗县| 大宁县|