一、使用apicloud+vue开发语音播放功能
** 在公司做项目时,有个医疗问诊的模块交给我开发,主要是医生和患者之间文字和语音沟通。语音播放有apicloud提供的模块audioStreamer,然后使用vant的组件来展示。
在开发过程中,遇到了两个问题:1、播放多条语音时,会产生错乱 2、想根据vue的ref来控制每个子组件的语音播放,但是列表遍历后取到的是数组。
接下来说一下如何解决这些问题: 播放多条语音时,需要停止上一条语音的播放,然后播放当前点击的语音,第一次用的是apicloud提供的暂停播放功能、切换功能,只有一条语音时,是完全没有问题的,但是当聊天中存在多条语音时,由于方法是异步的,而且每个子组件单独控制一条语音,所以会产生错乱。当时的第一想法是利用vue的ref属性,来控制每个子组件的状态。但是在使用中发现,取到的ref是一个数组,所以放弃了这种方案。 然后想到了利用vue向子组件传值,还有watch来监听数据的变化,这样控制每个子组件的问题解决了,但是还有个更大的坑在等着我,这时候语音播放还是混乱的。利用audioStreamer的方法,总是得不到理想的结果。 最后向同事求助,提供了一种解决方案,不再单纯的调用这个模块的api,还要监听它的工作状态,也就是在模块的回调方法中再去做其他操作。再使用prop和watch的配合,来控制每个子组件的播放状态。文字描述听上去挺简单的,但是实际开发用了一个多星期,当时也是掉了不少头发。。。 **