账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    在vuejs中,封装了highchats的组件,子组件监听不到父组件传入对象的更改。
    38
    0

    主要问题就是标题一样。


    这是我highchats的封装,test 属性是我用来测试,监听的。

    <template>
      <div :class="className" :style="{height:height,width:width}"></div>
    </template>
    
    <script>
    import Highcharts from "highcharts/highstock";
    import HighchartsMore from "highcharts/highcharts-more";
    import HighchartsDrilldown from "highcharts/modules/drilldown";
    import Highcharts3D from "highcharts/highcharts-3d";
    import { debounce } from "@/utils";
    
    HighchartsMore(Highcharts);
    HighchartsDrilldown(Highcharts);
    Highcharts3D(Highcharts);
    
    export default {
      props: {
        className: {
          type: String,
          default: "chart"
        },
        width: {
          type: String,
          default: "100%"
        },
        height: {
          type: String,
          default: "350px"
        },
        test: {
          type: String,
          default: ''
        },
        autoResize: {
          type: Boolean,
          default: true
        },
        chartData: {
          type: Object
        }
      },
       name: 'highcharts',
      data() {
        return {
          chart: null,
          options: Object
        };
      },
      mounted() {
        this.initChart();
        if (this.autoResize) {
          this.__resizeHanlder = debounce(() => {
            if (this.chart) {
              this.chart.reflow();
            }
          }, 100);
          window.addEventListener("resize", this.__resizeHanlder);
        }
    
        // 监听侧边栏的变化
        const sidebarElm = document.getElementsByClassName("sidebar-container")[0];
        sidebarElm.addEventListener("transitionend", this.__resizeHanlder);
      },
      beforeDestroy() {
        if (!this.chart) {
          return;
        }
        if (this.autoResize) {
          window.removeEventListener("resize", this.__resizeHanlder);
        }
    
        const sidebarElm = document.getElementsByClassName("sidebar-container")[0];
        sidebarElm.removeEventListener("transitionend", this.__resizeHanlder);
    
        this.chart.destroy();
        this.chart = null;
      },
      watch: {
        chartData: {
          deep: true,
          handler(val) {
            this.setOptions(val);
            console.log(val)
          }
        },
        test:{
          handler(val){
            console.log(val)
          }
        }
      },
      methods: {
        setOptions(expectedData) {
          this.options = expectedData
        },
    
        initChart() {
          this.setOptions(this.chartData);
          this.chart = new Highcharts.Chart(this.$el, this.options);
        }
      }
    };
    </script>
    

    以下是页面调用

        <Highchats :chart-data="temp_data.Highchats_linedata"></Highchats>

    我吧highchats 的整个配置对象,定义在了父组件的 data 中,第一次页面加载 的时候,能正常渲染。
    但是当我通过方法改变 这个配置对象的 data 时,highchats 中监听不到,请各位指点一下。

    在网上看了很多答案,都是创建图表后,拿到该图表的实例,然后通过调用highchats的函数进行更新图表,
    而没有看到在组件中,通过监听让highchats 自己进行更新的,这样是不可行吗?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 共 0 条
    • 软killer 普通会员 1楼
      502 Bad Gateway

      502 Bad Gateway


      nginx
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部