美文网首页JavaScript 进阶营让前端飞
微信小程序纯嵌入Vue页面

微信小程序纯嵌入Vue页面

作者: 学杂不精 | 来源:发表于2021-11-08 17:49 被阅读0次

效果图

小程序嵌入vue.gif

小程序加载链接

微信嵌入链接代码相当简单
1、index.wxml加载一个web-view组件,动态绑定地址

<!--index.wxml-->
<view class="container">
  <web-view src="{{ webSrc }}"></web-view>
</view>

2、js中动态修改加载的地址,这是为了后面分享什么用,其实也可以直接写上链接

// index.js

Page({
  data: {
    webSrc: ''
  },
  onLoad(options) {
    let url = 'https://xcx.lycyll.com/#/index?m_p_f_p=1'

    this.setData({
      webSrc: url
    })
  }
})

赶紧试试吧,是不是发现页面随着路由切换,没有提供返回按钮,虽然可以用系统的返回事件,但是没有返回按钮觉得很奇怪。

扩展vue路由,适配小程序

1、因为有分享等操作,导致我们没法固定认为某个页面是第一个页面,我们需要微信小程序onload函数内识别当前是否为小程序打开的第一个页面,并使用参数的方式传给vue(m_p_f_p为1,代表第一个页面),onload函数修改如下:

  onLoad(options) {
    let url = options.url;
    if (url) {

      url = decodeURIComponent(url)
      let pages = getCurrentPages();
      if (pages.length == 1) {
        if (url.indexOf('?') > -1) {
          url = url + '&m_p_f_p=1'
        } else {
          url = url + '?m_p_f_p=1'
        }
      }
    } else {
      url = 'https://xcx.lycyll.com/#/index?m_p_f_p=1'
    }
    this.setData({
      webSrc: url
    })
  }

2、router扩展,识别参数。

// 用到的基础函数
function GetQueryString(name) {
  let reg = new RegExp('([?]|&)' + name + "=([^&]*)(&|$)");
  let r =  window.location.href.substr(1).match(reg);
  if (r != null) {
    return decodeURIComponent(r[2]);
  }
  return '';
}

// 放在函数覆盖,扩展对象处理
let router = Object.create(orgin)
router.m_p_f_p = 0
if (GetQueryString('m_p_f_p') == 1) {
  router.m_p_f_p = 1
}

3、扩展router.push函数,让第一个页面的时候,调用小程序跳转页面函数。其他情况调用原来的push函数。

router.push = function () {

  if (router.m_p_f_p == 1) {

    let webUrl = ''
    let location = arguments[0];
    if (typeof location == 'string') {
      let path = basePath + location;

      webUrl = path;
    } else {
      // 获取路径,有的页面用的name跳转
      let path = router.getPathWithRoute(location);
      // 获取参数
      let args = router.getArgsWithRoute(location);
      // 拼接参数
      let arr = [];
      for(let key  in args){
        arr.push(`${key}=${args[key]}`);
      }

      if (path.indexOf('?') > -1) {
        path + '&' + arr.join('&')
      } else {
        path + '?' + arr.join('&')
      }

      path = basePath + path;

      webUrl = path;
    }

    // 如果是微信小程序,调用微信的navigateTo,mpWxFunc封装了微信相关的函数
    if (browserEnv.checkEnvType(browserEnv.enum.WX_MINIPROGRAM)) {
      mpWxFunc.navigateTo(webUrl);
      return ;
    }
  }
  // 其他情况使用原型上的push函数
  router.__proto__.push.call(this, ...arguments)
};

4、go函数需要相反处理,如果最后一个页面了,需要调用小程序的返回,或者返回页面大于当前栈里面页面数,也直接返回

router.go = function (n) {
  // 判断最后一个页面,或者返回数大于当前页面栈。customRouterData是前面为了动画扩展的。
  if (router.customRouterData.history && (router.customRouterData.history.length <= -n)) {
    // 判断是微信小程序
    if (browserEnv.checkEnvType(browserEnv.enum.WX_MINIPROGRAM)) {
      mpWxFunc.navigateBack()
      return ;
    }
  }

  router.__proto__.go.call(this, n)
}

到这里就基本完成了,前端开发只需要一心去写vue代码就好了。后面这套代码还能嵌入支付宝小程序等哦,封装思路基本不变。

相关文章

  • 微信小程序纯嵌入Vue页面

    效果图 小程序加载链接 微信嵌入链接代码相当简单1、index.wxml加载一个web-view组件,动态绑定地址...

  • 微信小程序嵌入H5,从H5获取数据返回小程序页面(wx.mini

    需求:微信小程序使用 web-view 组件嵌入H5链接,从H5页面中获取某些数据在微信小程序页面中进行处理。 微...

  • 微信小程序插件

    微信小程序插件 介绍 微信小程序插件是对一组js接口,自定义组件或页面的封装,用来嵌入微信小程序中,用来被开发者调...

  • 浅谈微信矩阵

    微信体系矩阵: 1)微信公众服务号 比如:嵌入 小程序 「承载商城」 「会员体系」 2)微信小程序 微信小程序相当...

  • 微信小程序页面间的传值方式

    最新在学习微信小程序时联想到之前angular,vue在页面间的传值方式。想到小程序的几种页面间传值方式,于是总结...

  • vue+element 后台系统搭建实践

    项目说明:一个微信小程序的后台配置系统 页面框架:vue + element-ui 相关技术:vue2.0 ,el...

  • H5、跳转外链、500个公众号,小程序搞事情,电商成双十一最大赢

    似乎是为了响应双十一的狂欢,微信小程序在最新一次的更新上显然下了大工夫: 1.小程序可嵌入H5页面,页面布局可由开...

  • mpvue

    问:mpvue里,哪些是要用微信小程序原生写法?(也就是mpvue和vue的区别) 答:vue里跳转页面,用

  • 微信小程序/微信公众号中文乱码的坑

    微信小程序可以通过webview嵌入H5页面可以说是给开发者很大的福音,手头的项目中有几个页面是使用H5开发的嵌入...

  • 接单

    接各种页面制作,pc端,移动端,小程序页面等等!为了避免纷扰,只接纯页面制作,包切图,有需要私聊! 微信:cbcm...

网友评论

    本文标题:微信小程序纯嵌入Vue页面

    本文链接:https://www.haomeiwen.com/subject/dizuzltx.html