业务场景:在小程序的开发中通常会在页面中定义多个子组件,在跳转到新的页面执行完更新后,返回当前页面发现子组件的数据并没有更新,是因为跳转操作并不需要销毁当前页面,销毁的话交互体验感很不好,这样就需要用到事件传递和数据监听,来更新单独子组件中的数据。
那么结合上面的需求和描述这是一段实例代码
1、首先,在a2子组件中定义一个方法,用来处理点击事件并跳转到b1页面:
// a2子组件的js文件
Component({
methods: {
handleClick() {
wx.navigateTo({
url: '/pages/b1/b1',
});
}
}
})
2、接下来,在b1页面中,可以通过Page对象的onUnload生命周期函数来监听页面返回操作:
// b1页面的js文件
Page({
onUnload() {
const pages = getCurrentPages();
const prevPage = pages[pages.length - 2];
if (prevPage.route === 'pages/a/a') {
prevPage.refreshData(); // 调用a页面的刷新数据方法
}
}
})
3、然后,在a页面中定义一个刷新数据的方法,并将该方法传递给a2子组件:
// a页面的js文件
Page({
refreshData() {
// 刷新a2子组件中的数据
const a2Component = this.selectComponent('#a2');
a2Component.refreshData();
}
})
4、最后,在a2子组件中定义刷新数据的方法,并在b1页面返回时调用该方法:
// a2子组件的js文件
Component({
methods: {
refreshData() {
// 刷新a2子组件中的数据
// 这里可以重新请求数据或者更新数据源
}
}
})
完结:
通过以上步骤,当在a2子组件中点击事件跳转到b1页面并返回时,可以通过监听返回操作来触发a2子组件中的数据刷新方法,从而实现数据的刷新