小程序---当前页面(监听者)监听被打开页面(被监听者),被打开页面(被监听者)发送监听的数据到当前页面(监听者)

场景:在开发小程序中,会出现这样一个场景:当前页面(监听者)打开并监听被打开页面(被监听者),被打开页面(被监听者)发生发送监听的数据到当前页面(监听者),具体实现如下:

注:写的时候是用Taro + react开发的小程序,可以把wx.换成Taro.

当前页面(监听者)

 // html代码
 	 	// 点击的时候调整到被打开页面(被监听者)
     <View onClick={this.goToMonitor}>
 // js代码
 goToMonitor = () => {
 	// 获取当前用户设置
    wx.getSetting({
      success: (res) => {
        if (!res.authSetting["scope.userLocation"]) {
        	// 调起客户端小程序设置页面。返回用户设置的操作结果
          wx.openSetting({
            success(res) {
              console.log(res.authSetting);
            },
          });
        } else {
          wx.navigateTo({
            url: `XXXX`, // 被打开页面(被监听者)的页面地址
            events: {
              // 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据
              getRegion: (data) => {
                this.setState(
                  {
                    // data就是被监听到的数据,可以在this.setState里面保存到当前页面(监听者)
                  },
                  this.xxxx(函数名) // 当拿到被监听到的数据,想里面操作其,可以在这写一个函数,看具体需求,可写可不写
                );
              },
            },
          });
        }
      },
    });
  };

被打开页面(被监听者)

	// html代码
 	 	// 在被打开页面(被监听页面)触发要监听的数据的改变
     <View onClick={this.handleMonitor}>

	// js代码
	// handleMonitor这个方法就是处理被打开页面(被监听者)的数据
	// info就是触发handleMonitor传过来的型参
  handleMonitor = (info) => {
    const { callback = "getRegion" } = this.$router.params;
    // 保存到上个界面
    // wx.getCurrentPage这个方法用来获取当前页面栈,数组第一个元素为首页,最后一个元素为当前页面
    const pages = wx.getCurrentPages();
    const prevPage = pages[pages.length - 2];
    const cb = prevPage.$component[callback];
    cb && cb(info);
    // Taro3只需要写下面👇的,上面的不需要写
    this.eventChannel && this.eventChannel.emit("getRegion", { info });
    // 返回到当前页面(监听者)
    wx.navigateBack();
  };
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值