Open KlarY opened 6 years ago
如果想重置在back的时候清空数据的话可以在onShow内进行重置
Object.assign(this, this.$options.data())
@lxyisme 是不能在onShow里面重置的, 因为用户最小化再次进入也会走 onShow, 或者 屏幕熄灭然后有点亮也会走 onShow 的, 最好的方案是写一个 Vue Plugin, 通过 mixin 混入 onUnload 方法, 然后在里面写 Object.assign(this.$data, this.$options.data())
// 定义插件
const somePlugin = {
install: function () {
Vue.mixin({
onUnload() {
if (this.$options.data) {
Object.assign(this.$data, this.$options.data())
}
}
})
}
}
// 使用插件
Vue.use(somePlugin)
@shaonialife navigateTo 是不会卸载页面的,所以是不会走onUnload, 这样的话 navigateBack 回的页面是不会初始化数据的哟,这种情况就得在 onShow 和 onHide 初始化数据,还有就是你这种写法是毁灭性的,每一个页面卸载都会调用,这样可不太好呐
@lxyisme 这么写就是为了模拟小程序原生表现, 页面卸载的时候数据回到初始状态, 我不希望用户再次进入该页面还能看到上一次的数据, 如果真要保存, 那也是存在 store 或者 通过wx.setStorage来保存数据, 如果我写在 onShow 里面, 那意味着我如果屏幕熄灭然后又点亮或者最小化后又重新进入, 数据肯定会被初始化, 造成数据丢失
navigateTo 是不会卸载页面, 那是因为开了一个新页面, 旧页面会走 onHide, 如果在 onHide 里面初始化数据, 那意味着用户再回来这个页面时, 数据已经丢失了. navigateBack 和 手动滑动返回都会卸载页面, 是会回调 onUnload 的, 在这个时候把数据清掉是最好时机
A 前往 B 页面 -> B 页面数据变化 -> 返回 A 页面 再进入 B 页面 -> 之前 B 页面的数据还在
这个需要框架解决一下 可能是内部做了相关的数据缓存?
mark
a 页面 navigateto b页面 navigateback 返回a页面
b返回a页面还是能看到a页面之前的数据,表现为页面先闪一下,再请求新的数据render新的页面
onshow 和 onhide 都尝试过 Object.assign(this.$data, this.$options.data())
是为什呢 @shaonialife @lxyisme
issue超过30天无更新或响应,7天后将自动关闭,如果问题状态有更新请及时更新issue
页面navigateback以后再打开上一次获取的data还在 难道只能丑陋地手动重置data嘛?