实现微信小程序和uniqpp 携带参数相互跳转。

1,092 阅读2分钟

一.从UniApp端跳转小程序。

app和小程序的互相跳转需要在微信开放平台给当前小程序和app进行关联。然后在app内要跳转之前先得从app内获取分享服务需调用plus.share.getServices,在从从分享服务中读取是否有配置微信分享。有的话在使用launchMiniProgram跳转微信小程序。 具体代码

	plus.share.getServices(e => {
		for (let i in e) {
		if ('weixin' === e[i].id) {//判断分享服务里面是否有分享到微信
		this.sharewx = e[i];
                this.sharewx.launchMiniProgram({
                  id: 'gh_********',// 需要跳转app的小程序原始id,是gh_开头。跟小程序id不一样
                   path: `pages/pay/appPay?userId=${this.id}&payTotal=${this.name}`,//需要跳转到小程序内的页面
                  type: 0 //0-正式版; 1-测试版; 2-体验版。 默认值为0
                }, res => {
                  console.log('11111')
                }, err => {
                  console.log('err', err)
                })
						}
						}
					});

从app跳转小程序需要传参可以在path的url 携带参数。

二.微信小程序里面获取app带过来的参数

这里面就跟小程序里面内部页面获取携带参数一样直接在onload里面获取

onLoad: function (options) {       //options用于接收传递过来的参数
var that = this;
that.setData({                             //this.setData的方法用于把传递过来的id转化成小程序模板语言
b_id: options.id,     //id是a页面传递过来的名称,a_id是保存在本页面的全局变量   {{b_id}}方法使用
b_tu: options.name,
})
}

三.从小程序跳转app

跳转按钮代码如下, 其中app-parameter 所绑定的是你要传给app的内容,类型是string。

<button open-type="launchApp" app-parameter="wechat" binderror="launchAppError">打开APP</button>

四.app接受小程序获得的参数。

每次页面重新打开都会触发app.js的onshow()生命钩子和当前页面的onshow().所以可以看需求,只在部分页面内的onshow()添加或者在全局的onshow()里面监听。获取的参数的方法是

this.argumentsNo = plus.runtime.arguments;

但是在ios的app有时候会出现取不到值,微信小程序有传值,但是app内监听不到。所以就是可能是onshow执行的时候它实际 plus.runtime.arguments 还没有取到值。所以给它加setTimeout,让它从现在的任务队列中跳出,等都执行完再去获取值。

setTimeout(
          function () {
            this.argumentsNo = plus.runtime.arguments;
          }.bind(this),
          10
        );

就这样所有的跳转的流程,就全部好了,但是我在安卓app在应用的第一次安装会出现plus.runtime.arguments,如何都取不到值,但是我只要把后台程序杀掉之后就可以正常取到值了。另外在本地调试的时候跳转跳转不了小程序,需要把pages.json里面以下代码块注释掉。

    "current": 0, //当前激活的模式(list 的索引项)
    "list": [{
      "name": "", //模式名称
      "path": "", //启动页面,必选
      "query": "" //启动参数,在页面的onLoad函数里面得到
    }]
  }