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

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

    },

相关推荐
lhldsg10 小时前
家政派单系统开发实战:从需求分析到智能调度全流程指南
java·junit·小程序·uni-app·需求分析
小小谈电商14 小时前
2026 年 8 月|国内企业级商城源码服务商全方位测评报告
大数据·运维·小程序
ZhiMuZhiLing17 小时前
企业获客软件免安装能力横评:网页端和小程序端实测数据
大数据·小程序·流量运营·用户运营
lhldsg17 小时前
课程排课系统实战指南:从数据库设计到算法调优全流程解析
java·数据库·算法·小程序
Ai-_Man18 小时前
AI办公智能体工作平台能否电脑批量导出?我们拆解了“AI导出鸭”的底层逻辑
人工智能·ai·小程序·电脑
博、、19 小时前
课程培训系统如何选型?从架构设计到答题模块的实战经验
小程序·需求分析
编程小橘子19 小时前
基于微信小程序健康心理测试、设计与实现 (源码+lw+参考文档+核心代码讲解等)
微信小程序·小程序·毕业设计·毕设
AI行业应用研究21 小时前
2026年主流报名工具测评报告:眨眼猫会务智能体报名小程序为何成为多场景首选?
java·开发语言·小程序
v1588972620121 小时前
货运搬家小程序从0到1(五):JWT 鉴权,拦截器 + ThreadLocal 用户上下文
小程序·货运小程序源码·货运小程序·搬家小程序
维双云1 天前
2026开发小程序公司有哪些?专业团队与服务路线整理。
小程序