小程序组件间通信

2021-01-12  本文已影响0人  泡杯感冒灵
如何在组件中,调用父元素的方法

比如,当歌曲播放到进度条末尾的时候,会触发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组件中
// 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
  },
})
上一篇 下一篇

猜你喜欢

热点阅读