成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

如何使用vue開(kāi)發(fā)公眾號(hào)網(wǎng)頁(yè)

瀏覽:2日期:2022-09-29 18:19:09
項(xiàng)目背景

主要就是一個(gè)h5頁(yè)面,涉及的功能不是很難,主要很久沒(méi)有開(kāi)發(fā)公眾號(hào),對(duì)整個(gè)開(kāi)發(fā)步驟有些生疏。其中包括對(duì)微信sdk的調(diào)用方式、用戶的微信授權(quán)和sdk的接入等。主要圍繞開(kāi)發(fā)步驟進(jìn)行梳理。

開(kāi)始

因?yàn)槭且粋€(gè)h5頁(yè)面,整體而言項(xiàng)目不大,然后在項(xiàng)目技術(shù)選型的時(shí)候確定使用vue框架進(jìn)行開(kāi)發(fā)。使用vue開(kāi)發(fā)h5,個(gè)人整體感覺(jué)還是效率比較高的。在ui庫(kù)方面選擇的是vant庫(kù),組件整體而言還是不錯(cuò)的,支持自定義主題方便樣式自定義比較適合h5的開(kāi)發(fā)。

通過(guò)vue-cli創(chuàng)建項(xiàng)目

安裝腳手架工具

npm install -g @vue/cli# ORyarn global add @vue/cli

創(chuàng)建一個(gè)項(xiàng)目

vue create water_project

然后就創(chuàng)建了項(xiàng)目目錄

.├── README.md├── babel.config.js├── jsconfig.json├── package-lock.json├── package.json├── public│ ├── favicon.ico│ └── index.html├── src│ ├── App.vue│ ├── api│ ├── assets│ ├── components│ ├── global.less│ ├── main.js│ ├── mock│ ├── router│ ├── store│ ├── utils│ └── views└── vue.config.js關(guān)于移動(dòng)的適配

因?yàn)槭且苿?dòng)端網(wǎng)頁(yè),所以需要做適配。網(wǎng)上有很多適配方案這里就不展開(kāi)說(shuō)了,主要說(shuō)下本項(xiàng)目使用的方案是amfe-flexible結(jié)合rem來(lái)做的,是淘寶的一種解決方案。關(guān)于設(shè)計(jì)稿的單位px轉(zhuǎn)換為rem使用的是postcss的postcss-pxtorem方案。其實(shí)用webpack的loader來(lái)做也是可以的,具體方案自行百度。

安裝amfe-flexible包

npm i amfe-flexible -S 安裝postcss-pxtorem插件

npm i postcss-pxtorem -D 在main.js中引入amfe-flexible

import 'amfe-flexible' 在vue.config.js中配置postcss插件

項(xiàng)目中如果沒(méi)有vue.config.js文件就手動(dòng)創(chuàng)建一個(gè),這個(gè)是vue cli的配置文件。

css: { loaderOptions: { postcss: {plugins: [ autoprefixer(), pxtorem({ rootValue: 37.5, propList: ['*'], }),], }, },

到此樣式適配已經(jīng)完成,至于rootValue為什么是37.5.主要是為了vant的適配,所以設(shè)計(jì)稿以375px為參考。如果沒(méi)有使用第三方ui庫(kù)可以設(shè)計(jì)稿以750為參考,此時(shí)rootValue為75。

使用 normalize.css

使用normalize.css來(lái)消除瀏覽器之間的基礎(chǔ)樣式差異

npm i normalize.css -S

在main.js中引入

import 'normalize.css'接入vant庫(kù)

vant是有贊出品的一個(gè)ui庫(kù),站在巨人的肩膀上效率當(dāng)然是要快很多。這種第三方庫(kù)只能作為基礎(chǔ),在有設(shè)計(jì)稿的情況下要對(duì)樣式進(jìn)行定制。簡(jiǎn)單的樣式vant都支持主題定制化還是比較方便的,如果有一些樣式?jīng)]有提供自定義主題,就只能寫(xiě)樣式進(jìn)行覆蓋了。

下載安裝vant

npm i vant -S 引入組件有3種方式,官網(wǎng)也有介紹,詳情可以查看官網(wǎng),簡(jiǎn)單說(shuō)下使用方式: 方式一. 自動(dòng)按需引入組件 (推薦)

babel-plugin-import 是一款 babel 插件,它會(huì)在編譯過(guò)程中將 import 的寫(xiě)法自動(dòng)轉(zhuǎn)換為按需引入的方式。

# 安裝插件npm i babel-plugin-import -D// 在.babelrc 中添加配置// 注意:webpack 1 無(wú)需設(shè)置 libraryDirectory{ 'plugins': [ ['import', { 'libraryName': 'vant', 'libraryDirectory': 'es', 'style': true }] ]}// 對(duì)于使用 babel7 的用戶,可以在 babel.config.js 中配置module.exports = { plugins: [ [’import’, { libraryName: ’vant’, libraryDirectory: ’es’, style: true }, ’vant’] ]};

// 接著你可以在代碼中直接引入 Vant 組件// 插件會(huì)自動(dòng)將代碼轉(zhuǎn)化為方式二中的按需引入形式import { Button } from ’vant’;方式二. 手動(dòng)按需引入組件

在不使用插件的情況下,可以手動(dòng)引入需要的組件。

import Button from ’vant/lib/button’;import ’vant/lib/button/style’;方式三. 導(dǎo)入所有組件

Vant 支持一次性導(dǎo)入所有組件,引入所有組件會(huì)增加代碼包體積,因此不推薦這種做法

import Vue from ’vue’;import Vant from ’vant’;import ’vant/lib/index.css’;Vue.use(Vant);

Tips: 配置按需引入后,將不允許直接導(dǎo)入所有組件。

定制vant主題步驟一 引入樣式源文件

定制主題時(shí),需要引入組件對(duì)應(yīng)的 Less 樣式文件,支持按需引入和手動(dòng)引入兩種方式。

按需引入樣式(推薦)在 babel.config.js 中配置按需引入樣式源文件,注意 babel6 不支持按需引入樣式,請(qǐng)手動(dòng)引入樣式。

module.exports = { plugins: [ [ ’import’, {libraryName: ’vant’,libraryDirectory: ’es’,// 指定樣式路徑style: (name) => `${name}/style/less`, }, ’vant’, ], ],};手動(dòng)引入樣式

// 引入全部樣式import ’vant/lib/index.less’;// 引入單個(gè)組件樣式import ’vant/lib/button/style/less’;步驟二 修改樣式變量

使用 Less 提供的 modifyVars 即可對(duì)變量進(jìn)行修改,下面是參考的 webpack 配置。

// webpack.config.jsmodule.exports = { rules: [ { test: /.less$/, use: [// ...其他 loader 配置{ loader: ’less-loader’, options: { // 若 less-loader 版本小于 6.0,請(qǐng)移除 lessOptions 這一級(jí),直接配置選項(xiàng)。 lessOptions: { modifyVars: {// 直接覆蓋變量’text-color’: ’#111’,’border-color’: ’#eee’,// 或者可以通過(guò) less 文件覆蓋(文件路徑為絕對(duì)路徑)hack: `true; @import 'your-less-file-path.less';`, }, }, },}, ], }, ],};

如果 vue-cli 搭建的項(xiàng)目,可以在 vue.config.js 中進(jìn)行配置。

// vue.config.jsmodule.exports = { css: { loaderOptions: { less: {// 若 less-loader 版本小于 6.0,請(qǐng)移除 lessOptions 這一級(jí),直接配置選項(xiàng)。lessOptions: { modifyVars: { // 直接覆蓋變量 ’text-color’: ’#111’, ’border-color’: ’#eee’, // 或者可以通過(guò) less 文件覆蓋(文件路徑為絕對(duì)路徑) hack: `true; @import 'your-less-file-path.less';`, },}, }, }, },};引入微信jssdk

引入jsssdk有兩種方式,一種是用js鏈接直接引入,寫(xiě)在index.html中。

<script src='https://res2.wx.qq.com/open/js/jweixin-1.6.0.js '></script>

然后在使用的地方就調(diào)用window.wx.xxx就能使用sdk提供的方法了。

第二種就是使用npm包的方式

安裝weixin-js-sdk

npm i weixin-js-sdk -S 在main.js中使用

import wx from 'weixin-js-sdk'// 掛在vue的原型上方便使用Vue.prototype.$wx = wx;

這樣引入之后就可以用this.$wx.xx來(lái)使用相應(yīng)的方法了比如:

this.$wx.config({ debug: false, // 開(kāi)啟調(diào)試模式,調(diào)用的所有api的返回值會(huì)在客戶端alert出來(lái),若要查看傳入的參數(shù),可以在pc端打開(kāi),參數(shù)信息會(huì)通過(guò)log打出,僅在pc端時(shí)才會(huì)打印。 appId: res.data.appId, // 必填,公眾號(hào)的唯一標(biāo)識(shí) timestamp: String(res.data.timestamp), // 必填,生成簽名的時(shí)間戳 nonceStr: String(res.data.nonceStr), // 必填,生成簽名的隨機(jī)串 signature: res.data.signature, // 必填,簽名,見(jiàn)附錄1 jsApiList: [ 'getNetworkType', 'getLocation', ], // 必填,需要使用的JS接口列表,所有JS接口列表見(jiàn)附錄2});注冊(cè)驗(yàn)證sdk才可以使用api

其實(shí)注冊(cè)的重要邏輯都在后端,提供一個(gè)獲取配置信息的接口,前端直接調(diào)用sdk的config方法進(jìn)行注冊(cè)就好了。這里把sdk的注冊(cè)邏輯寫(xiě)在app.vue文件中

封裝一個(gè)注冊(cè)sdk的方法

async getWxJssdkConf() { const res = await this.$api.getSdkConfig({url: window.location.href.split('#')[0], }); if (res.success) {this.$wx.config({ debug: false, // 開(kāi)啟調(diào)試模式,調(diào)用的所有api的返回值會(huì)在客戶端alert出來(lái),若要查看傳入的參數(shù),可以在pc端打開(kāi),參數(shù)信息會(huì)通過(guò)log打出,僅在pc端時(shí)才會(huì)打印。 appId: res.data.appId, // 必填,公眾號(hào)的唯一標(biāo)識(shí) timestamp: String(res.data.timestamp), // 必填,生成簽名的時(shí)間戳 nonceStr: String(res.data.nonceStr), // 必填,生成簽名的隨機(jī)串 signature: res.data.signature, // 必填,簽名,見(jiàn)附錄1 jsApiList: [ 'getNetworkType', 'getLocation', ], // 必填,需要使用的JS接口列表,所有JS接口列表見(jiàn)附錄2});this.$wx.ready(() => { this.$wx.checkJsApi({ jsApiList: ['getNetworkType', 'getLocation'], // 需要檢測(cè)的JS接口列表,所有JS接口列表見(jiàn)附錄2, success: function (res) { console.log('checkJsApi', res); }, });});this.$wx.error((res) => { console.log('wx.error', res);}); } },

created() { this.getWxJssdkConf(); },

其中this.$api.getSdkConfig為調(diào)用后臺(tái)的接口,這里是給api也掛載到了vue的原型上,方便使用不用每個(gè)頁(yè)面都去引入api

Vue.prototype.$api = api

在app.vue中注冊(cè)成功后,就可以使用sdk的api了。

微信的授權(quán)

如果要獲取用戶的信息,就必須讓用戶進(jìn)行授權(quán)。在授權(quán)的時(shí)候使用的是微信提供的接口,詳細(xì)請(qǐng)看這里,如果是只獲取用戶的openid只用靜默授權(quán)就可以了,不用用戶主動(dòng)授權(quán)。具體請(qǐng)看文檔,這里只需要openid就使用靜默授權(quán)如下:

在需要授權(quán)的主入口使用,比如這里是主頁(yè)Home,要先調(diào)用微信的接口獲取code,在用code去后端換取openid

/** * @description: 獲取授權(quán)code * @param {*} * @return {*} */ getCode() { // 從 window.location.href 中截取 code 并且賦值 // window.location.href.split(’#’)[0] if (window.location.href.indexOf('state') !== -1) {this.code = qs.parse( window.location.href.split('#')[0].split('?')[1]).code; } if (this.code) { // 存在 code 直接調(diào)用接口 this.handGetUserInfo(this.code);} else { this.handLogin();} }, /** * @description: 獲取用戶授權(quán)登陸 * @param {*} * @return {*} */ handLogin() { // 重定向地址重定到當(dāng)前頁(yè)面,在路徑獲取 code const hrefUrl = window.location.href; if (this.code === '') {window.location.replace(`https://open.weixin.qq.com/connect/oauth2/authorize?appid=XXXXXXXX &redirect_uri=${encodeURIComponent(hrefUrl)} &response_type=code &scope=snsapi_base &state=h5#wechat_redirect`); } }, /** * @description: 獲取用戶信息 * @param {*} code * @return {*} */ handGetUserInfo(code) { // 調(diào)用后臺(tái)接口 },

這里就是授權(quán)的主要邏輯,沒(méi)啥意外就基本走通了。

斷網(wǎng)進(jìn)行提示

如果用戶的網(wǎng)絡(luò)斷了,就跳轉(zhuǎn)到斷網(wǎng)提示頁(yè)。主要使用的是html提供的方法進(jìn)行判斷,判斷邏輯寫(xiě)在app.vue文件中,因?yàn)槊總€(gè)頁(yè)面都會(huì)提示,就直接在主入口進(jìn)行處理。

mounted() { window.addEventListener('online', this.updateOnlineStatus); window.addEventListener('offline', this.updateOnlineStatus); }, methods: { updateOnlineStatus(e) { const { type } = e; console.log('type==============', type); this.onLine = type === 'online'; }, } beforeDestroy() { window.removeEventListener('online', this.updateOnlineStatus); window.removeEventListener('offline', this.updateOnlineStatus); },

主要就是這個(gè)方法來(lái)檢查用戶網(wǎng)絡(luò)連接情況

判斷是不是微信打開(kāi)的網(wǎng)頁(yè)

這里主要使用的是vue-router的導(dǎo)航守衛(wèi)來(lái)做的,在跳轉(zhuǎn)之前對(duì)瀏覽器進(jìn)行判斷,如果不是微信內(nèi)置瀏覽器就直接跳轉(zhuǎn)到異常提示頁(yè)

router.beforeEach((to, from, next) => { const ua = navigator.userAgent.toLowerCase(); if ( to.path !== '/notwx' && !(ua.match(/MicroMessenger/i) == 'micromessenger') ) { next('/notwx'); } else { next(); }});

有時(shí)跳轉(zhuǎn)頁(yè)面,頁(yè)面的滾動(dòng)高度會(huì)保留在上個(gè)頁(yè)面的滾動(dòng)高度,這里也是在導(dǎo)航守衛(wèi)中解決的,主動(dòng)給滾動(dòng)到頂部

router.afterEach(() => { window.scrollTo(0, 0);});小結(jié)

到此整個(gè)開(kāi)發(fā)流程簡(jiǎn)單記錄完畢,也是對(duì)自己開(kāi)發(fā)的一個(gè)梳理,也方便以后查閱。希望對(duì)看到文章的你有所幫助,個(gè)人見(jiàn)解,如有問(wèn)題歡迎指正,覺(jué)得有幫助,歡迎點(diǎn)個(gè)贊,謝謝。

以上就是如何使用vue開(kāi)發(fā)公眾號(hào)網(wǎng)頁(yè)的詳細(xì)內(nèi)容,更多關(guān)于vue開(kāi)發(fā)公眾號(hào)網(wǎng)頁(yè)的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Vue
相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
精品91视频| 婷婷夜色潮精品综合在线| 亚洲黄色小视频| 91免费版在线| wwwwww.欧美系列| 国产一区91精品张津瑜| 一本高清dvd不卡在线观看| 亚洲一区二区欧美| 日韩午夜免费| 中文幕一区二区三区久久蜜桃| 精品国产成人系列| 韩日av一区二区| 欧美午夜一区二区三区| 日韩av中文字幕一区二区三区| 国产很黄免费观看久久| 欧美亚洲综合在线| 首页国产欧美日韩丝袜| 亚洲欧美日韩综合国产aⅴ| 亚洲欧美日韩人成在线播放| 国产中文一区二区| 国产精品欧美综合在线| 红杏aⅴ成人免费视频| 中文字幕亚洲一区二区av在线| 久久精品国产亚洲高清剧情介绍| 欧美 日韩 国产一区二区在线视频| 久久狠狠久久综合桃花| 亚洲一区视频在线| av成人免费观看| 一区二区免费看| 免费在线成人| 免费不卡在线观看| 欧美色综合网站| 精品系列免费在线观看| 欧美美女一区二区三区| 久草在线在线精品观看| 欧美一级欧美三级在线观看| 国产.欧美.日韩| 久久久久久久久蜜桃| 欧美三级网页| 日韩美女啊v在线免费观看| 在线日本成人| 亚洲综合在线第一页| 男人天堂欧美日韩| 麻豆久久久久久| 欧美一区二区在线观看| 99热精品一区二区| 国产亚洲视频系列| 在线观看的日韩av| 婷婷久久综合九色国产成人 | 最近中文字幕一区二区三区| 欧美日韩视频在线一区二区观看视频| 日韩美女一区二区三区四区| 99在线精品视频| 中文字幕不卡在线播放| 亚洲精品人人| 美女网站色91| 精品免费视频.| 国产中文一区二区| 丝袜诱惑制服诱惑色一区在线观看| 亚洲国产日韩欧美一区二区三区| 欧美电视剧免费全集观看 | 欧美搞黄网站| 一区二区三区四区不卡视频| 色婷婷综合久久久中文字幕| 精品午夜久久福利影院| 久久精品日韩一区二区三区| 国产日产精品一区二区三区四区的观看方式 | 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 亚洲欧美日韩一区在线观看| 亚洲福利视频三区| 欧美日韩三级一区| 欧美一区二区三区在线播放| 亚洲精品日韩一| 欧美日韩亚洲综合一区二区三区| 蜜臀av一区二区在线免费观看| 制服诱惑一区二区| 精品亚洲国内自在自线福利| 欧美xfplay| 亚洲日本欧美| 国内精品国产成人国产三级粉色| 欧洲精品视频在线观看| 国产成人在线网站| 亚洲色图欧美在线| 欧美视频一区二区三区在线观看 | 亚洲一区二区精品视频| 久久国产精品久久w女人spa| 国产激情一区二区三区| 亚洲天天做日日做天天谢日日欢| 极品av少妇一区二区| 日韩福利视频导航| 精品国产123| 榴莲视频成人在线观看| 成人精品视频一区二区三区| 一级日本不卡的影视| 欧美一区二区视频网站| 影音先锋久久精品| 国产精品一二二区| 一区二区免费在线| 精品国偷自产国产一区| 亚洲一区久久| 91免费版在线| 裸体在线国模精品偷拍| 中文字幕成人av| 欧美色图片你懂的| 国内一区二区三区在线视频| 精品一区二区三区免费毛片爱 | 一区二区成人在线| 欧美日韩精品一区二区三区四区| 国产一区二区在线观看视频| 国产精品亲子伦对白| 欧美羞羞免费网站| 欧美日韩国产高清| 自拍偷拍亚洲欧美日韩| 欧美猛男男办公室激情| 99精品视频免费观看| 99久久免费国产| 精品一区二区三区在线观看国产| 日韩免费视频一区二区| 中文一区二区| 91网站最新地址| 伦理电影国产精品| 亚洲精品ww久久久久久p站| 精品久久一二三区| 欧美日韩一区二区三区不卡| 一本色道精品久久一区二区三区| 午夜精品久久久| 国产欧美日韩精品一区| 91麻豆精品国产91久久久久 | 免费视频久久| 欧美视频导航| 成人av电影在线| 激情文学综合网| 午夜久久久久久久久| 亚洲人123区| 国产精品网站在线观看| 精品嫩草影院久久| 欧美久久一区二区| 欧美这里有精品| 蜜桃久久av| 99热这里只有精品8| 91麻豆自制传媒国产之光| 国产成人精品影视| 麻豆精品视频在线观看| 亚洲午夜三级在线| 一区二区在线观看免费视频播放| 欧美日韩国产精品自在自线| 国产视频一区免费看| 韩日视频一区| 色综合天天综合色综合av| 国产成人av影院| 狠狠色丁香九九婷婷综合五月| 国产精品网站一区| 久久精品夜色噜噜亚洲aⅴ| 欧美一个色资源| 欧美日韩久久不卡| 欧美日韩免费一区二区三区 | 国产精品久久久久久久久图文区| 美女被久久久| 亚洲日本黄色| 一本色道久久综合亚洲精品高清 | 亚洲精品精品亚洲| 国产精品三级久久久久三级| 久久新电视剧免费观看| 日韩午夜中文字幕| 69久久99精品久久久久婷婷| 欧美性色欧美a在线播放| 日本韩国欧美一区二区三区| 久久一二三四| 久久不射网站| 六月天综合网| 色哟哟在线观看一区二区三区| www.av亚洲| 成人v精品蜜桃久久一区| 高清beeg欧美| 不卡电影免费在线播放一区| 成人app在线观看| 99久久综合99久久综合网站| 99久久久精品| 波多野结衣中文一区| www.一区二区| 欧美激情第二页| 在线观看一区视频| 99在线精品视频在线观看| 精品91在线| 一区视频在线看| 国产欧美韩日| 日本韩国欧美一区| 欧美乱熟臀69xxxxxx| 日韩女优av电影| 国产亚洲女人久久久久毛片| 国产女人aaa级久久久级 | 国产电影一区在线| 国产高清精品网站| 大陆成人av片| 91色porny蝌蚪| 亚洲国产精品久久久久婷婷老年| 国产91综合网| k8久久久一区二区三区| 91视频精品在这里| 亚洲看片免费|