我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何使用vue开发公众号网页

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何使用vue开发公众号网页

项目背景

主要就是一个h5页面,涉及的功能不是很难,主要很久没有开发公众号,对整个开发步骤有些生疏。其中包括对微信sdk的调用方式、用户的微信授权和sdk的接入等。主要围绕开发步骤进行梳理。

开始

因为是一个h5页面,整体而言项目不大,然后在项目技术选型的时候确定使用vue框架进行开发。使用vue开发h5,个人整体感觉还是效率比较高的。在ui库方面选择的是vant库,组件整体而言还是不错的,支持自定义主题方便样式自定义比较适合h5的开发。

通过vue-cli创建项目

安装脚手架工具


npm install -g @vue/cli
# OR
yarn global add @vue/cli

创建一个项目


vue create water_project

然后就创建了项目目录


.
├── README.md
├── babel.config.js
├── jsconfig.json
├── package-lock.json
├── package.json
├── public
│   ├── favicon.ico
│   └── index.html
├── class="lazy" data-src
│   ├── App.vue
│   ├── api
│   ├── assets
│   ├── components
│   ├── global.less
│   ├── main.js
│   ├── mock
│   ├── router
│   ├── store
│   ├── utils
│   └── views
└── vue.config.js

关于移动的适配

因为是移动端网页,所以需要做适配。网上有很多适配方案这里就不展开说了,主要说下本项目使用的方案是amfe-flexible结合rem来做的,是淘宝的一种解决方案。关于设计稿的单位px转换为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文件就手动创建一个,这个是vue cli的配置文件。


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

到此样式适配已经完成,至于rootValue为什么是37.5.主要是为了vant的适配,所以设计稿以375px为参考。如果没有使用第三方ui库可以设计稿以750为参考,此时rootValue为75。

使用 normalize.css

使用normalize.css来消除浏览器之间的基础样式差异


npm i normalize.css -S

在main.js中引入


import "normalize.css"

接入vant库

vant是有赞出品的一个ui库,站在巨人的肩膀上效率当然是要快很多。这种第三方库只能作为基础,在有设计稿的情况下要对样式进行定制。简单的样式vant都支持主题定制化还是比较方便的,如果有一些样式没有提供自定义主题,就只能写样式进行覆盖了。

  • 下载安装vant

npm i vant -S
  • 引入组件有3种方式,官网也有介绍,详情可以查看官网,简单说下使用方式:

方式一. 自动按需引入组件 (推荐)

babel-plugin-import 是一款 babel 插件,它会在编译过程中将 import 的写法自动转换为按需引入的方式。


# 安装插件
npm i babel-plugin-import -D
// 在.babelrc 中添加配置
// 注意:webpack 1 无需设置 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 组件
// 插件会自动将代码转化为方式二中的按需引入形式
import { Button } from 'vant';

方式二. 手动按需引入组件

在不使用插件的情况下,可以手动引入需要的组件。


import Button from 'vant/lib/button';
import 'vant/lib/button/style';

方式三. 导入所有组件

Vant 支持一次性导入所有组件,引入所有组件会增加代码包体积,因此不推荐这种做法


import Vue from 'vue';
import Vant from 'vant';
import 'vant/lib/index.css';

Vue.use(Vant);

Tips: 配置按需引入后,将不允许直接导入所有组件。

定制vant主题

步骤一 引入样式源文件

定制主题时,需要引入组件对应的 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 即可对变量进行修改,下面是参考的 webpack 配置。


// webpack.config.js
module.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 中进行配置。


// vue.config.js
module.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 class="lazy" data-src="https://res2.wx.qq.com/open/js/jweixin-1.6.0.js "></script>

然后在使用的地方就调用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来使用相应的方法了比如:


 this.$wx.config({
          debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
          appId: res.data.appId, // 必填,公众号的唯一标识
          timestamp: String(res.data.timestamp), // 必填,生成签名的时间戳
          nonceStr: String(res.data.nonceStr), // 必填,生成签名的随机串
          signature: res.data.signature, // 必填,签名,见附录1
          jsApiList: [
            "getNetworkType",
            "getLocation",
          ], // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
        });

注册验证sdk才可以使用api

其实注册的重要逻辑都在后端,提供一个获取配置信息的接口,前端直接调用sdk的config方法进行注册就好了。这里把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, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
          appId: res.data.appId, // 必填,公众号的唯一标识
          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为调用后台的接口,这里是给api也挂载到了vue的原型上,方便使用不用每个页面都去引入api


Vue.prototype.$api = api

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

微信的授权

如果要获取用户的信息,就必须让用户进行授权。在授权的时候使用的是微信提供的接口,详细请看这里,如果是只获取用户的openid只用静默授权就可以了,不用用户主动授权。具体请看文档,这里只需要openid就使用静默授权如下:

  • 在需要授权的主入口使用,比如这里是主页Home,要先调用微信的接口获取code,在用code去后端换取openid


    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 直接调用接口
          this.handGetUserInfo(this.code);
        } else {
          this.handLogin();
        }
    },
    
    handLogin() {
      // 重定向地址重定到当前页面,在路径获取 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`);
      }
    },
    
    handGetUserInfo(code) {
      // 调用后台接口
    },

这里就是授权的主要逻辑,没啥意外就基本走通了。

断网进行提示

如果用户的网络断了,就跳转到断网提示页。主要使用的是html提供的方法进行判断,判断逻辑写在app.vue文件中,因为每个页面都会提示,就直接在主入口进行处理。


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);
  },

主要就是这个方法来检查用户网络连接情况

判断是不是微信打开的网页

这里主要使用的是vue-router的导航守卫来做的,在跳转之前对浏览器进行判断,如果不是微信内置浏览器就直接跳转到异常提示页


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

有时跳转页面,页面的滚动高度会保留在上个页面的滚动高度,这里也是在导航守卫中解决的,主动给滚动到顶部


router.afterEach(() => {
  window.scrollTo(0, 0);
});

小结

到此整个开发流程简单记录完毕,也是对自己开发的一个梳理,也方便以后查阅。希望对看到文章的你有所帮助,个人见解,如有问题欢迎指正,觉得有帮助,欢迎点个赞,谢谢。

以上就是如何使用vue开发公众号网页的详细内容,更多关于vue开发公众号网页的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何使用vue开发公众号网页

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何使用Java开发微信公众号

这篇文章给大家介绍如何使用Java开发微信公众号,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。首先必须要有一个个人微信公众号个人微信公众号相关的接口权限有限,不过用于个人学习体验一下足够了,如图:然后进入微信公众后台,
2023-06-15

如何使用PHP开发微信公众号的支付功能

如何使用PHP开发微信公众号的支付功能随着移动支付的快速发展,微信支付作为国内最主流的支付方式之一,成为了许多企业和个人必备的支付手段。而在开发微信公众号时,如果能够集成支付功能,将能够为用户提供更便捷的支付方式,也能够为企业带来更多的收益
2023-10-27

如何在微信公众号上进行PHP开发

如何在微信公众号上进行PHP开发微信公众号已经成为了一个非常受欢迎的社交平台,许多企业和个人都希望能够在微信公众号上进行开发,以吸引更多的用户和粉丝。PHP作为一种广泛使用的后端编程语言,也可以应用于微信公众号的开发中。本文将介绍如何使用P
2023-10-27

如何用PHP开发微信公众号的抽奖活动

如何用PHP开发微信公众号的抽奖活动随着移动互联网的快速发展,微信公众号已成为企业与用户交流和营销的重要平台。而抽奖活动作为一种促销手段,能够有效地吸引用户参与和增加用户粘性。在本文中,我们将介绍如何使用PHP开发微信公众号的抽奖活动,并提
2023-10-26

如何用PHP开发微信公众号的积分商城

如何用PHP开发微信公众号的积分商城随着微信公众号的普及和发展,越来越多的企业开始关注并利用微信公众号来进行营销和推广。其中,积分商城是一种常见且受欢迎的功能,通过积分兑换商品,可以增强用户粘性和参与度。本文将详细介绍如何使用PHP开发微信
2023-10-27

如何用PHP开发微信公众号的推送功能

如何用PHP开发微信公众号的推送功能,需要具体代码示例微信公众号已经成为了现代社会中非常重要的一种社交媒体平台,许多企业、组织和个人都在微信公众号上展示自己的品牌和内容。在公众号中,推送功能是非常重要的一项功能,可以将最新的资讯、活动和优惠
如何用PHP开发微信公众号的推送功能
2023-10-28

如何在微信公众号上使用PHP开发自定义菜单

如何在微信公众号上使用PHP开发自定义菜单微信公众号是一个非常重要的媒介,很多企业和个人都选择在微信公众号上进行推广和交流。而自定义菜单则是微信公众号中不可或缺的一部分,可以帮助提高用户体验和导航功能。本文将介绍如何使用PHP开发自定义菜单
2023-10-27

如何利用PHP开发微信公众号的投票系统

如何利用PHP开发微信公众号的投票系统引言:随着移动互联网的快速发展,微信公众号成为了营销推广的重要平台之一。而在公众号中,投票活动是一种常见的互动方式,可以增加用户粘性和参与度。本文将介绍如何利用PHP开发微信公众号的投票系统,并提供具体
2023-10-27

微信公众号开发中网页授权怎么实现简化用户绑定

今天就跟大家聊聊有关微信公众号开发中网页授权怎么实现简化用户绑定,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。首先我们要明确绑定微信用户和系统用户,其目的是为了用户在一次绑定以后,再
2023-06-04

如何利用PHP开发微信公众号的个人中心

如何利用PHP开发微信公众号的个人中心随着微信的普及和发展,越来越多的企业和个人开始关注和使用微信公众号。微信公众号作为一个重要的互联网平台,给企业和个人带来了很多机会和挑战。而在开发微信公众号时,个人中心是用户最重要的一个功能之一。下面将
2023-10-26

使用Nodejs开发微信公众号后台服务实例

摘要: 微信,庞大的用户基数,极强的用户粘性,在近两年吸引了无数的开发者注意力。 Nodejs,近两年发展非常快的开发工具,尤其适合构建移动后台。本文就以笔者自己开发的实例,来描述如何基于Nodejs开发属于自己的微信公众号。在这个实例中,
2022-06-04

PHP开发微信公众号:如何创建互动问答

PHP开发微信公众号:如何创建互动问答,需要具体代码示例随着微信公众号的普及,越来越多的人开始关注如何在公众号中实现互动问答功能。本文将介绍如何使用PHP开发微信公众号,并提供具体的代码示例,帮助读者快速实现互动问答功能。一、搭建开发环境在
2023-10-27

如何用C#开发微信公众平台

这篇文章主要讲解了“如何用C#开发微信公众平台”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何用C#开发微信公众平台”吧!服务号和订阅号服务号是公司申请的微信公共账号,订阅号是个人申请的,
2023-06-17

PHP开发微信公众号:如何进行数据统计

PHP开发微信公众号:如何进行数据统计,需要具体代码示例导语:如今,微信公众号已经成为了企业与用户进行沟通和推广的重要平台之一。然而,对于运营者来说,了解用户行为和数据统计是非常重要的。本文将详细介绍如何使用PHP开发微信公众号进行数据统计
2023-10-26

如何用PHP开发微信公众号的会员管理系统

如何用PHP开发微信公众号的会员管理系统随着移动互联网的飞速发展,微信成为了人们生活中不可或缺的一部分。微信公众号作为一个重要的社交平台,为个人与企业提供了一个与用户进行交流的重要渠道。而在微信公众号中,会员管理系统被广泛应用,可以帮助企业
2023-10-27

编程热搜

目录