uni-ui的抽屉组件关闭后怎么触发页面刷新
在uni-app里用uni-drawer抽屉组件,修改数据后关闭抽屉,页面数据没更新。之前试过在关闭事件里用uni.$emit(‘refresh’),页面监听了这个事件但没反应,控制台也没报错,求问正确的触发方式是怎样的?
抽屉组件代码这样写的:
<uni-drawer :visible="showDrawer" @close="handleClose">
<!-- 表单内容 -->
<button @click="saveData">保存</button>
</uni-drawer>
保存方法执行后直接关闭抽屉:
saveData() {
// 提交数据成功后
this.showDrawer = false
uni.$emit('refresh')
}
页面监听部分:
onLoad() {
uni.$on('refresh', () => {
console.log('收到刷新指令') // 这个日志没打印
this.loadData()
})
}
uni.$on在页面的onLoad里监听,但事件可能在监听页面还没注册完成时就触发了。而且uni.$emit和uni.$on跨组件通信容易有生命周期对不上的问题。常见的解决方案是用回调函数或者直接通过父组件控制。最稳的做法是在关闭抽屉的时候直接调用刷新方法,而不是发事件。
你可以在抽屉关闭的
handleClose里处理数据更新:然后把
saveData改成保存完主动关闭并触发刷新:如果你的抽屉是子组件,父组件可以这样传方法进去:
handleSave里执行保存后再关闭:总之别用
uni.$emit/$on做这种强依赖的刷新,容易丢事件。直接函数调用最靠谱。