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

图形展示:
代码展示:
  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 小时前
记录一下在微信小程序中的使用MobX做状态管理
微信小程序·小程序·mobx
weixin_lynhgworld3 小时前
淘宝扭蛋机小程序:如何用游戏化思维提升电商转化率
游戏·小程序
小小王app小程序开发10 小时前
潮玩盲盒抽赏小程序玩法拆解:不同视角下的增长逻辑分析
小程序
星光一影10 小时前
Java版旅游系统/文旅系统/旅游助手/旅游攻略/公众号/小程序/app全套源码
java·小程序·开源软件·旅游·源代码管理
小小王app小程序开发10 小时前
盲盒小程序爬塔玩法深度细分:非技术视角下的运营细节拆解
小程序
游戏开发爱好者810 小时前
苹果iOS26系统升级:液态玻璃与智能功能全解析
macos·ios·小程序·uni-app·objective-c·cocoa·iphone
流***陌13 小时前
宠物寄养美容小程序前端功能解析:贴心照料宠物的全流程支撑
小程序·宠物
小小王app小程序开发16 小时前
任务悬赏小程序深度细分分析:非技术视角下的运营逻辑拆解
大数据·小程序
2501_9159184117 小时前
iOS 26 App 性能测试|性能评测|iOS 26 性能对比:实战策略
android·macos·ios·小程序·uni-app·cocoa·iphone
腾马科技1 天前
新版saas餐饮外卖小程序源码/微信/支付宝/抖音/扫码点餐/DIY装修/美团代付/全开源
微信小程序·小程序·点餐小程序