美文网首页
小程序组件间通信

小程序组件间通信

作者: 泡杯感冒灵 | 来源:发表于2021-01-12 16:33 被阅读0次
如何在组件中,调用父元素的方法
  • 组件中可以往外边激活一个事件this.triggerEvent('自定义事件名') ,父页面调用的时候监听这个事件并处理

比如,当歌曲播放到进度条末尾的时候,会触发onEnded事件,在这个事件中我们可以调用播放下一首按钮绑定的函数,就可以实现自动播放下一首的效果。
假如,歌曲进度条,我们是封装成了一个独立的组件,然后我们在歌曲播放界面引入了进度条组件。

image.png
那么我们该怎么在进度条组件的js里,调用父页面里定义的方法呢?
      // 监听背景音频自然播放结束事件
  backgroundAudioManager.onEnded(() => {
      console.log("onEnded")
      this.triggerEvent('musicEnd')
  })

    // 然后在父页面调用的组件上监听这个组件激活的事件,并指定事件处理函数
 <view class="progress-bar">
    <cus-progress-bar 
      bind:musicEnd="onNext" 
      bind:timeUpdate="timeUpdate"
      bind:musicPlay="onPlay"
      bind:musicPause="onPause" 
      isSame="{{isSame}}"    
  />
  </view>

   // 然后在该事件处理函数里,再做相关的处理
    onNext(){
      nowPlayingIndex++
      if(nowPlayingIndex === musiclist.length){
        nowPlayingIndex = 0
      }
      this._loadMusicDetail(musiclist[nowPlayingIndex].id)
  },
同级别组件如何通信
  • 比如A组件和B组件都别C组件引用。那么A组件的数据如何传递给B组件?
// A组件中
// sendData是自定义的名称,是A组件激活的自定义事件
this.triggerEvent('sendData')

//C组件调用A组件时,在组件上监听
<x-A  bind:sendData="sendData"><x-A/>

// 然后C组件在监听到A组件传递过来的sendData事件后,会执行sendData事件处理函数
sendData(event){
    // 我们调用组件B的时候,给它添加一个类名,然后通过类名获取到组件B的实例对象
    // 然后就可以访问到B组件的任意属性和方法
    // 我们事先在B组件中,定义了一个update方法,接收一个num参数
    // 我们就可以在C组件中,通过B的实例对象触发update方法,并把A组件传递的数据num传给update
    // 父组件可以通过事件监听函数的event参数获取到子组件传递的数据  event.detail.num
    this.selectComponent('类名').update(event.detail.num)  // 然后B组件就可以在update方法中获取到A传递的数据了
}
设置全局属性
//app.js
App({
  onLaunch: function (options) {
    console.log('onLaunch 执行')
    console.log(options)
    this.checkUpdate()
    if (!wx.cloud) {
      console.error('请使用 2.2.3 或以上的基础库以使用云能力')
    } else {
      wx.cloud.init({
        // env 参数说明:
        //   env 参数决定接下来小程序发起的云开发调用(wx.cloud.xxx)会默认请求到哪个云环境的资源
        //   此处请填入环境 ID, 环境 ID 可打开云控制台查看
        //   如不填则使用默认环境(第一个创建的环境)
        env: 'development-8gcxm1si2cfdf385',
        traceUser: true,
      })
    }
    this.getOpenId()
    this.globalData = {
      playingMusicId:-1,
    }
  },
  setPlayingMusicId(musicId){
    this.globalData.playingMusicId = musicId
  },
  getPlayingMusicId(){
    return this.globalData.playingMusicId
  },
})
  • 然后在其他页面,获取到app的实例,就可以放访问到app的全局属性和方法了

相关文章

  • 小程序组件间通信

    如何在组件中,调用父元素的方法 组件中可以往外边激活一个事件this.triggerEvent('自定义事件名')...

  • 小程序组件间传值(组件通信)

    上一节说了模板(template)或者组件(component)的区别,介绍了组件的使用,父级使用组件传值用的是p...

  • 干货博客集

    基础 webpack4.x 入门一篇足矣 react组件通信方式汇总 vue组件之间的通信 原生小程序组件通信 w...

  • EventBus使用详解

    EventBus是一款针对优化的发布/订阅事件总线。简化了应用程序内各组件间、组件与后台线程间的通信。优点是开销小...

  • React组件间通信

    1. 组件间通信1.1.父组件向子组件通信1.2.子组件向父组件通信1.3.跨级组件间通信1.4.无嵌套关系组件间...

  • 微信小程序自定义标签组件component封装、组件生命周期,组

    微信小程序自定义标签组件component封装、组件生命周期,组件通信 本文来说下小程序的自定义标签组件封装。相比...

  • 小程序组件通信

    小程序页面数据传递 修改页面栈 场景 在确认订单页面,用户需要选择已有的收货人,而已有收货人列表在另一个页面,那么...

  • EventBus笔记--基本使用

    EventBus直译过来,叫做消息总线 , 可以简化应用程序内各组件间、组件与后台线程间的通信. 比如,Acti...

  • android eventbus

    EventBus :针对Android优化的发布/订阅事件总线,简化应用程序内各组件间、组件与后台线程间的通信。优...

  • 探索Android开源框架 - 5. EventBus使用及源码

    相关概念 定义 Android事件发布/订阅框架,简化应用程序内组件间,组件与后台线程间的通信; 优点 代码简洁,...

网友评论

      本文标题:小程序组件间通信

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