微信小程序 -订阅发布模式

图形展示:
代码展示:
  1. 安装模块 pubsub-js

    npm i pubsub-js --save

  2. 导入模块(在需要订阅发布的 js 页面内进行导入)

    import PubSub from 'pubsub-js'

注:在微信小程序中无法直接npm 下载 导入 的(安装一个就需要构建一次)

解决:菜单栏 --> 工具 --> 构建 npm 点击即可(会出现新的目录)

详情页:
  1. 绑定两个事件,用于在点击 prev(上一页) next(下一页) 时触发事件

wxml页面:

复制代码
<viewclass="musicControl">
    <text class="iconfont icon-iconsMusicyemianbofangmoshiShuffle"></text>
    <text
        class="iconfont icon-shangyishou"
        id="pre"
        bindtap="switchMusic"  //绑定事件
    ></text>
    <text
        class="iconfont {{isPlay ? "icon-zanting':'icon-bofang' } big"
        bindtap="musicPlay"  
    ></text>
    <text 
        class="iconfont icon-next" 
        id="next bindtap="switchMusic'  //绑定事件
    ></text>
    <text class="iconfont icon-iconsMusicyemianbofangmoshiplayList"></text>
</view>
  1. 触发事件,使用 PubSub 的 publish 方法进行发布

js页面:

复制代码
switchMusic(e){
    //是需要向歌曲列表页进行信息的发布
    const type = e.currentTarget.id;
    PubSub.publish("switchType",type);
},
  1. 在生命周期 onLoad 中 使用 PubSub 的 subscribe 方法对列表页发布的内容进行订阅

有两个参数:

参数一:要订阅的发布名称

参数二:回调函数,处理订阅的 发布信息内容

函数参数一 (msg):发布的对应名称 如:PubSub.publish("musicId",musicId);

函数参数二 (musicId):发布的对应参数 如:PubSub.publish("musicId",musicId);

复制代码
onLoad(options) {
    PubSub.subscribe("musicId",(msg, musicId) => {
        console.log("musicId:", musicId);
    });
},

列表页:

  1. 在生命周期 onLoad 中 使用 PubSub 的 subscribe 方法对详情页发布的内容进行订阅

有两个参数:

参数一:要订阅的发布名称

参数二:回调函数,处理订阅的 发布信息内容

函数参数一 (msg):发布的对应名称 如: PubSub.publish("switchType",type);

函数参数二 (type):发布的对应参数 如: PubSub.publish("switchType",type);

复制代码
onLoad(options) {
    PubSub.subscribe("switchType",(msg, type) => {
        let { index, recommendList } = this.data;
        
        // 控制边界
        if(type === "next") {
            index === recommendList.length -1 && (index = -1);
            // 下一首
            index += 1;
        } else {
            index === 0 && (index = recommendList.length);
            //上一首
            index -= 1;
        }
        console.log(index);
    });
},
  1. 处理完数据后,在下方使用 PubSub 的 publish 方法进行发布

    onLoad(options) {
    PubSub.subscribe("switchType",(msg, type) => {
    let { index, recommendList } = this.data;

    复制代码
         if(type === "next") {
             // 下一首
             index += 1;
         } else {
             //上一首
             index -= 1;
         }
         console.log(index);
         let musicId = recommendList[index].id;
         PubSub.publish("musicId",musicId); //将音乐id发布到详情页
         this.setData({
             index,
         });
     });

    },

相关推荐
澄江静如练_4 小时前
微信小程序发体验版
微信小程序·小程序
流口水的兔子8 小时前
作为一个新手,如果让你去用【微信小程序通过BLE实现与设备通讯】,你会怎么做,
前端·物联网·微信小程序
一念杂记8 小时前
免费开源!微信小程序商城源码,快速搭建你的线上商城系统!
微信小程序·uni-app
张晓~183399481219 小时前
数字人源码部署流程分享--- PC+小程序融合方案
javascript·小程序·矩阵·aigc·文心一言·html5
The_era_achievs_hero11 小时前
微信小程序61~70
微信小程序·小程序
编程猪猪侠12 小时前
Taro+Vue3实现微信小程序富文本编辑器组件开发指南
vue.js·微信小程序·taro
汤姆yu1 天前
基于微信小程序的学校招生系统
微信小程序·小程序·招生小程序
说私域1 天前
基于开源AI智能名片链动2+1模式的S2B2C商城小程序:门店私域流量与视频号直播融合的生态创新研究
人工智能·小程序·开源
说私域1 天前
传统微商困境与开源链动2+1模式、AI智能名片及S2B2C商城小程序的转型破局
人工智能·小程序·开源
一渊之隔1 天前
微信小程序在用户拒绝授权后无法使用wx.opensetting再次获取定位授权
微信小程序·小程序