笔记:微信小程序笔记——组件中实现数据监听并格式化数据

145 阅读1分钟

数据监听器

Component({
  /**
   * 组件的属性列表
   */
  properties: {
    playlist: {
      type: Object
    }
  },
  // 数据监听器
  observers: {
    'playlist.playCount'(count) {
      console.log(count)
      // console.log(this._tranNumber(count,2))
      this.setData({
        _count:this._tranNumber(count,2)
      })
    }
  },

  /**
   * 组件的初始数据
   */
  data: {
    _count : 0
  },

  /**
   * 组件的方法列表
   */
  methods: {

    // 处理播放量 第一个值为处理的数值,第二项为保留小数位数
    _tranNumber(num,point){
      let numStr = num.toString().split('.')[0] //舍去小数点
      if (numStr.length < 6){//小于10万直接返回数值
        return numStr
      }
      // 大于10万小于千万
      else if (numStr.length >= 6 && numStr.length <= 8) {
        // 截取出小数点位
        let decimal = numStr.substring(numStr.length - 4, numStr.length - 4 + point)
        return parseFloat(parseInt(num/10000) + '.' + decimal)+ "万"
      }
      // 大于千万
      else if (numStr.length > 8){
        // 截取出小数点位
        let decimal = numStr.substring(numStr.length - 8,numStr.length - 8 + point)
        return parseFloat(parseInt(num / 100000000) + '.' + decimal)+ "亿"
      }
    }

  }
})

要点

可以监听当前组件中任何一个值的变化,如果监听的是对象下的属性值要使用引号:如

'numberA, numberB': function(numberA, numberB){} 'playlist.playCount'(count) {}

给数据赋值时,一定不能给监听数据本身赋值(会触发死循环)如:

  observers: {
    'playlist.playCount'(count) {
      console.log(count)
      // console.log(this._tranNumber(count,2))
      this.setData({
       //错误写法-死循环
       //playlist.playCount:this._tranNumber(count,2)
       //正确写法—给新变量赋值
       _count:this._tranNumber(count,2)
      })
    }
  },
   /**
   * 组件的初始数据
   */
  data: {
    _count : 0
  },