mpvue页面跳转之后再重新进入里边的变量还存在?

3zwtqj6y  于 5个月前  发布在  其他
关注(0)|答案(3)|浏览(43)

项目中有很多通用的页面,第一次进入好,在重新进入还是上一次的数据
export default { data () { return { id: wx.getStorageSync('id') } },
比如像这样在data定义的id不会再执行wx.getStorageSync('id'),而是用上一次打开的。
用redirect 跳转后再进入还是这样。
这是一种什么样的机制?对每个打开的页面数据都进行保存,只能通过小程序的onHide来对变量一个一个进行销毁吗?这样的机制不会出现内存溢出的问题吗?

kknvjkwl

kknvjkwl1#

更优雅的方式应该是把wx.getStorageSync('id')写在生命周期函数里。

b4qexyjb

b4qexyjb2#

https://github.com/heyushuo/mpvue-shop ,2018 年 10 月 26 日 : 在src目录下新增了minxins文件夹,这里主要为了解决跳转同一个页面数据数据没有初始化问题,全局添加混合组件,不需要再每个页面onload的时候进行初始化数据了

//在main.js里引入此混合组件
//全局处理重复页面跳转详情初始化,和详情跳详情返回的bug
import MyPlugin from './minxins'
Vue.use(MyPlugin)

huwehgph

huwehgph3#

也可以试试这个plugin

class Test {
  data = {}

  install (Vue) {
    const This = this

    // 不支持 data 下面的function 因为使用的是JSON.stringify和parse进行的深拷贝
    // 在页面onload的时候 会根据Vue实例的_uid进行页面识别,如果是第一次加载 则会先保存一份data作为原始数据并且生成数据栈,后面的所有onload 都会保存一份data push到 dataStack 然后再把当前的data使用原始数据进行覆盖
    // 在onUnload的时候 会先将页面数据从 dataStack 中读取恢复到页面上,然后清除
    Vue.mixin({
      // onload的时候取原始数据
      onLoad () {
        const c = This.data[this._uid]

        if (c) {
          c.dataStack.push(This.deepData(this.$data))

          This.resetData(this, c.rawData)
        } else {
          This.data[this._uid] = {
            rawData: This.deepData(this.$data),
            dataStack: []
          }
        }
      },

      // onUnload 还原页面data数据
      onUnload () {
        const c = This.data[this._uid].dataStack

        This.resetData(this, c[c.length - 1])
        c.pop()
      }
    })
  }

  resetData (vm, data) {
    if (!data) { return }

    const d = this.deepData(data)
    Object.keys(d).forEach(item => {
      vm[item] = d[item]
    })
  }

  deepData (data) {
    return JSON.parse(JSON.stringify(data))
  }
}

export default new Test()

食用方法,保存成文件然后引入

import Test from './test.js'
Vue.use(Test)

相关问题