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

图形展示:
代码展示:
  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,
         });
     });

    },

相关推荐
代码不加糖1 小时前
从零手写简易 Taro:20 行 JSX 如何变成小程序?(硬核实战)
小程序·taro
云云只是个程序马喽16 小时前
AI漫剧创作系统开发定制指南
人工智能·小程序·php
斯班奇的好朋友阿法法1 天前
鸿蒙 vs iOS vs 微信小程序:开发平台全面对比
ios·微信小程序·harmonyos
cosinmz2 天前
图片太多太乱怎么整理?分享一个我最近常用的图片转 PDF方法
经验分享·小程序·pdf
科技互联.2 天前
2026年小程序定制市场:个性化需求激增,技术深度成竞争关键
人工智能·小程序
小羊Yveesss2 天前
2026年小程序商城的现状和发展趋势
小程序
Greg_Zhong3 天前
微信小程序如何关闭:当前渲染模式为webview?
微信小程序·微信小程序渲染引擎·渲染引擎需搭配更高基础库
橘子海全栈攻城狮3 天前
【最新源码】养老院系统管理A013
java·spring boot·后端·web安全·微信小程序
智慧景区与市集主理人3 天前
五一市集分账混乱?巨有科技智慧市集小程序实现统一收款、自动分账
大数据·科技·小程序
程序鉴定师3 天前
深圳小程序制作哪家好?2026深度市场分析与选择指南?
大数据·小程序