电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

如何使用vue開發(fā)公眾號網(wǎng)頁

瀏覽:2日期:2022-09-29 18:19:09
項目背景

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

開始

因為是一個h5頁面,整體而言項目不大,然后在項目技術(shù)選型的時候確定使用vue框架進(jìn)行開發(fā)。使用vue開發(fā)h5,個人整體感覺還是效率比較高的。在ui庫方面選擇的是vant庫,組件整體而言還是不錯的,支持自定義主題方便樣式自定義比較適合h5的開發(fā)。

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

安裝腳手架工具

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

創(chuàng)建一個項目

vue create water_project

然后就創(chuà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)于移動的適配

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

安裝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插件

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

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

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

使用 normalize.css

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

npm i normalize.css -S

在main.js中引入

import 'normalize.css'接入vant庫

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

下載安裝vant

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

引入jsssdk有兩種方式,一種是用js鏈接直接引入,寫在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來使用相應(yīng)的方法了比如:

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

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

封裝一個注冊sdk的方法

async getWxJssdkConf() { const res = await this.$api.getSdkConfig({url: window.location.href.split('#')[0], }); if (res.success) {this.$wx.config({ debug: false, // 開啟調(diào)試模式,調(diào)用的所有api的返回值會在客戶端alert出來,若要查看傳入的參數(shù),可以在pc端打開,參數(shù)信息會通過log打出,僅在pc端時才會打印。 appId: res.data.appId, // 必填,公眾號的唯一標(biāo)識 timestamp: String(res.data.timestamp), // 必填,生成簽名的時間戳 nonceStr: String(res.data.nonceStr), // 必填,生成簽名的隨機串 signature: res.data.signature, // 必填,簽名,見附錄1 jsApiList: [ 'getNetworkType', 'getLocation', ], // 必填,需要使用的JS接口列表,所有JS接口列表見附錄2});this.$wx.ready(() => { this.$wx.checkJsApi({ jsApiList: ['getNetworkType', 'getLocation'], // 需要檢測的JS接口列表,所有JS接口列表見附錄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)用后臺的接口,這里是給api也掛載到了vue的原型上,方便使用不用每個頁面都去引入api

Vue.prototype.$api = api

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

微信的授權(quán)

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

在需要授權(quán)的主入口使用,比如這里是主頁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)前頁面,在路徑獲取 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)用后臺接口 },

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

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

如果用戶的網(wǎng)絡(luò)斷了,就跳轉(zhuǎn)到斷網(wǎng)提示頁。主要使用的是html提供的方法進(jìn)行判斷,判斷邏輯寫在app.vue文件中,因為每個頁面都會提示,就直接在主入口進(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); },

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

判斷是不是微信打開的網(wǎng)頁

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

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

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

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

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

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

標(biāo)簽: Vue
相關(guān)文章:
主站蜘蛛池模板: HYDAC过滤器,HYDAC滤芯,现货ATOS油泵,ATOS比例阀-东莞市广联自动化科技有限公司 | 齿轮减速马达一体式_蜗轮蜗杆减速机配电机-德国BOSERL齿轮减速电动机生产厂家 | 警用|治安|保安|不锈钢岗亭-售货亭价格-垃圾分类亭-移动厕所厂家-苏州灿宇建材 | 工控机-图像采集卡-PoE网卡-人工智能-工业主板-深圳朗锐智科 | 英国雷迪地下管线探测仪-雷迪RD8100管线仪-多功能数字听漏仪-北京迪瑞进创科技有限公司 | 安驭邦官网-双向万能直角铣头,加工中心侧铣头,角度头[厂家直销] 闸阀_截止阀_止回阀「生产厂家」-上海卡比阀门有限公司 | 12cr1mov无缝钢管切割-15crmog无缝钢管切割-40cr无缝钢管切割-42crmo无缝钢管切割-Q345B无缝钢管切割-45#无缝钢管切割 - 聊城宽达钢管有限公司 | 奶茶加盟,奶茶加盟店连锁品牌-甜啦啦官网 | 计算机毕业设计源码网| 油缸定制-液压油缸厂家-无锡大鸿液压气动成套有限公司 | 暴风影音| 挤奶设备过滤纸,牛奶过滤纸,挤奶机过滤袋-济南蓝贝尔工贸有限公司 | 天津市能谱科技有限公司-专业的红外光谱仪_红外测油仪_紫外测油仪_红外制样附件_傅里叶红外光谱技术生产服务厂商 | ET3000双钳形接地电阻测试仪_ZSR10A直流_SXJS-IV智能_SX-9000全自动油介质损耗测试仪-上海康登 | 玻璃钢格栅盖板|玻璃钢盖板|玻璃钢格栅板|树篦子-长沙川皖玻璃钢制品有限公司 | SF6环境监测系统-接地环流在线监测装置-瑟恩实业 | 上海小程序开发-上海小程序制作公司-上海网站建设-公众号开发运营-软件外包公司-咏熠科技 | 耐压仪-高压耐压仪|徐吉电气| 丙烷/液氧/液氮气化器,丙烷/液氧/液氮汽化器-无锡舍勒能源科技有限公司 | 首页-瓜尔胶系列-化工单体系列-油田压裂助剂-瓜尔胶厂家-山东广浦生物科技有限公司 | 富森高压水枪-柴油驱动-养殖场高压清洗机-山东龙腾环保科技有限公司 | 沈阳建筑设计公司_加固改造设计_厂房设计_设计资质加盟【金辉设计】 | 数显水浴恒温振荡器-分液漏斗萃取振荡器-常州市凯航仪器有限公司 | 正压送风机-多叶送风口-板式排烟口-德州志诺通风设备 | 游戏版号转让_游戏资质出售_游戏公司转让-【八九买卖网】 | 深圳VI设计-画册设计-LOGO设计-包装设计-品牌策划公司-[智睿画册设计公司] | FFU_空气初效|中效|高效过滤器_空调过滤网-广州梓净净化设备有限公司 | 广州冷却塔维修厂家_冷却塔修理_凉水塔风机电机填料抢修-广东康明节能空调有限公司 | 滤芯,过滤器,滤油机,贺德克滤芯,精密滤芯_新乡市宇清流体净化技术有限公司 | 耐压仪-高压耐压仪|徐吉电气| 英思科GTD-3000EX(美国英思科气体检测仪MX4MX6)百科-北京嘉华众信科技有限公司 | 企业彩铃制作_移动、联通、电信集团彩铃上传开通_彩铃定制_商务彩铃管理平台-集团彩铃网 | 安德建奇火花机-阿奇夏米尔慢走丝|高维|发那科-北京杰森柏汇 | 小青瓦丨古建筑瓦丨青瓦厂家-宜兴市徽派古典建筑材料有限公司 | 双效节能浓缩器-热回流提取浓缩机组-温州市利宏机械 | 赛尔特智能移动阳光房-阳光房厂家-赛尔特建筑科技(广东)有限公司 | 连续密炼机_双转子连续密炼机_连续式密炼机-南京永睿机械制造有限公司 | 上海软件开发-上海软件公司-软件外包-企业软件定制开发公司-咏熠科技 | 南京办公用品网-办公文具用品批发-打印机耗材采购 | 杭州公司变更法人-代理记账收费价格-公司注销代办_杭州福道财务管理咨询有限公司 | 搅拌磨|搅拌球磨机|循环磨|循环球磨机-无锡市少宏粉体科技有限公司 |