同一个页面引用两次语音转文字的自定义组件,每次语音的结果都只更新在第二次引用的输入框中(主题处语音输入,但得到的结果却更新在描述的字段中,描述处字段的语音结果正常更新在描述处)
引用处
<van-field name="titleContent" model:value="{{titleContent}}" label="主题:" required placeholder="请输入" bind:change="onTitleChange">
<voice slot="right-icon" model:voice-value="{{titleContent}}" model:size="30"></voice>
</van-field>
<van-field name="desc" model:value="{{desc}}" label="描述:" type="textarea" autosize placeholder="请输入" bind:change="onDescChange" required>
<voice slot="right-icon" model:voice-value="{{desc}}" model:size="22"></voice>
</van-field>
原因及解决方法:
原因:
根据题主https://developers.weixin.qq.com/community/develop/article/doc/0004c2cf8303304cedafaabff56813 这篇文章的解决方法可以知道,导致这个问题的主要原因是,无论有多少的声音转文字组件,这些组件都共享一个全局的声音转文字的manager,也就是 getRecordRecognitionManager此方法的返回值。
所以就会导致在所有的监听方法无论是onStart还是onError,onStope,都会以最后一次绑定的为准。(js的对象为引用特性,更改一个地方其他地方都会受到影响。)
因此出现了无论更改那哪个,都只会在最后一个生效的问题。
解决:
题主的方法就可以解决,如果想要更详细的,根据上面的原因亦可灵活解决。
下图为本人的一个类似解决方法。
实验了一下:只存在一次调用自定义组件,数据更新正常
更换了上下两次调用的自定义组件的位置,发现结果永远只更新在最后一次调用自定义组件的位置