美文网首页
echartjs with Vue,子组件监听对象类型的 pro

echartjs with Vue,子组件监听对象类型的 pro

作者: 在幽幽暗暗反反复复中追问 | 来源:发表于2019-10-10 11:05 被阅读0次

echarts 使用

根据文档 可以快速上手
需要注意的地方有:

  1. 画图的 div 需要设置高宽
  2. 可获取 dom 的生命周期(mounted 后)

遇到的需求与解决

  1. 在 Vue 触发点击事件,改变图表数据
    思路:触发事件后,直接改变图表的数据
    结果:失败,因为如果要 echart 实例感知图表数据的改变需要通过 echart 的 API:setOption()

  2. Vue 监听复杂对象的变化
    setOption 的参数是一个对象(如图)

    optionData

通常会改变的部分是 option.series[0].data ,这不是基本数据类型,使用 watch 监听对象类型的数据变化时,需要变量指向的地址发生变化
常用 JSON、concat、slice、map、filter 等不影响原对象的方法

  1. watch 的 deep 选项
// Vue 官网例子
watch: {
    // 该回调会在任何被侦听的对象的 property 改变时被调用,不论其被嵌套多深
    c: {
        handler: function (val, oldVal) { /* ... */ },
        deep: true
    },
    // watch vm.e.f's value: {g: 5}
    'e.f': function (val, oldVal) { /* ... */ }
    }

测试发现 deep 的作用有限,变量指向的地址没有改变时,就监听不到(也是由于同样的原因,很多方法都不能监听到)
使用 'option.series[0].data' 这样的监听方式也不行,这方法只能使用简单的 . 运算符

总结

  1. 使子组件监听到父组件传来的对象的变化:
    父组件使用 JSON、concat、slice、map、filter 等不影响原对象的方法来修改要传给子组件的数据(目的是让变量指向一个新地址)
    举个例子:
    // test 是要从父组件传递给子组件的数据
    // 子组件通过 watch 监听 test
    
    // 父组件
    // this.test = [1,2,3,4]
    
    // 可行,地址改变了
    this.test = this.test.filter((item) => item < 3)
    
    // 不可行,地址没有改变,子组件监听不到
    this.test[0] = 12
    
  2. react 画图 recharts

相关文章

网友评论

      本文标题:echartjs with Vue,子组件监听对象类型的 pro

      本文链接:https://www.haomeiwen.com/subject/utyopctx.html