收藏
回答

在data中定义了一个属性,初始值为 new Map(),打印出来确是对象{}

data: {

    API: {

        getDoctor: new Map(),

        getHosipital: new Map(),

        getDepart: new Map(),

        getIndications: new Map()

    }

}

最后一次编辑于  2018-12-05
回答关注问题邀请回答
收藏

2 个回答

  • jiabin
    jiabin
    2018-12-05

    我也写过类似的,data里放了一个带有静态方法、实例方法的对象,然后某些操作之后就丢失了,其实官网有写:页面加载时,data 将会以JSON字符串的形式由逻辑层传至渲染层,因此data中的数据必须是可以转成JSON的类型:字符串,数字,布尔值,对象,数组。  
    后来把这份数据拷贝一份放到data外了,这样data里的数据只参与渲染。

    2018-12-05
    赞同
    回复 2
    • 秦同学ʚ🦄ɞ
      秦同学ʚ🦄ɞ
      2018-12-05

      我不知道我有没有理解对!我是这样实现的

      在page外定义了

      const __API = {

      getDoctor: new Map(),

      getHosipital: new Map(),

      getDepart: new Map(),

      getIndications: new Map()

      }

      page中这样写:

      Page({

          data: {

              API: {}

          },

          onLoad: function () {

              this.setData({

                  API: __API

              })

              console.log(this.data.API);

          }

      })

      // 打印出来没毛病,感谢~~~

      2018-12-05
      回复
    • jiabin
      jiabin
      2018-12-05回复秦同学ʚ🦄ɞ

      不是这个意思,你现在虽然打印出来没毛病,但是在经过某些页面上的操作之后,data下的数据会dto化,就是变成普通的字面量对象。我猜测是框架进行了拷贝,丢失了原引用。
      这种情况我的做法是除了this.setData({API:_API}),之外,还设置了一个this.API=_API; 后续的数据操作都在this.API上进行,data里只做简单的赋值,你可以理解为this.setData({API:this.API}),缺点就是赋值的时候必须两个对象都要同步。

      2018-12-05
      1
      回复
  • 拾忆
    拾忆
    2018-12-05

    很秀的写法~

    2018-12-05
    赞同
    回复 2
    • 秦同学ʚ🦄ɞ
      秦同学ʚ🦄ɞ
      2018-12-05

      没有在秀啊😭~正儿八经的,头一回写小程序

      2018-12-05
      回复
    • 拾忆
      拾忆
      2018-12-05回复秦同学ʚ🦄ɞ

      简单粗暴点,默认值直接{}或者[]

      2018-12-05
      回复