chart接入后台数据后vue不响应式显示图片

chart接入后台数据后vue不响应式显示图片

watch: {
  //观察option的变化
  config: {
    handler(newVal, oldVal) {
      if (this.chart) {
        if (newVal) {
          this.chart.setOption(newVal);
        } else {
          this.chart.setOption(oldVal);
        }
      } else {
        this.init();

      }
    },
    deep: true //对象内部属性的监听,关键。
  }
  },

完整的charts文件内容,我是自己写的公用组件,

  • Charts.vue
<template>
  <div class="pr chart">
    <div ref="chart" class="chart-body"></div>
    <slot></slot>
  </div>
</template>

<script scoped>
export default {
  props: {
    config: {
      type: Object,
      default: () => ({})
    },

    onClick: {
      type: Function,
      default: () => {}
    },
    onDispatchAction: {
      type: Object,
      default: () => ({})
    },
     onMouseover: {
      type: Function,
      default: () => {}
    }
  },
  watch: {
    //观察option的变化
    config: {
      handler(newVal, oldVal) {
        if (this.chart) {
          if (newVal) {
            this.chart.setOption(newVal);
          } else {
            this.chart.setOption(oldVal);
          }
        } else {
          this.init();

        }
      },
      deep: true //对象内部属性的监听,关键。
    }
  },
  mounted() {
    if (!this.$echarts) {
      return;
    }
    //初始化echarts
    let echartsWarp = this.$refs["chart"];
    let chart = (this.chart = this.$echarts.init(echartsWarp));
    chart.setOption(this.config);

    //点击旋转扇形,切该扇形高亮,我用的是每次点击重新渲染图,
    //这样可以每次计算扇形起点,达到旋转的视觉效果
    chart.on("click", params => {
      this.onClick(params);
      chart.setOption(this.config);
    });
    //高亮设置
    chart.dispatchAction(this.onDispatchAction)
    // //初始化设置高亮
    chart.dispatchAction({
      type: ‘highlight‘,
      seriesIndex: 0,
      dataIndex: 0
    })
    //取消鼠标进入自动高亮效果
    chart.on("mouseover", params => {
      this.onMouseover(params);
    });
    //屏幕大小改变时,图形大小自适应
    window.addEventListener("resize", () => {
      chart.resize();
    });
  },
};
</script>
<style scoped>
.chart {
  height: 3.7rem;
  width: 3.7rem;
  margin: 0 auto;
}
.chart-body {
  width: 100%;
  height: 100%;
}
</style>

原文地址:https://www.cnblogs.com/sinceForever/p/12146192.html

时间: 2024-10-02 19:02:37

chart接入后台数据后vue不响应式显示图片的相关文章

vue.js响应式原理解析与实现

从很久之前就已经接触过了angularjs了,当时就已经了解到,angularjs是通过脏检查来实现数据监测以及页面更新渲染.之后,再接触了vue.js,当时也一度很好奇vue.js是如何监测数据更新并且重新渲染页面.今天,就我们就来一步步解析vue.js响应式的原理,并且来实现一个简单的demo. 首先,先让我们来了解一些基础知识. 基础知识 Object.defineProperty es5新增了Object.defineProperty这个api,它可以允许我们为对象的属性来设定gette

vue系列---响应式原理实现及Observer源码解析(一)

_ 阅读目录 一. 什么是响应式? 二:如何侦测数据的变化? 2.1 Object.defineProperty() 侦测对象属性值变化 2.2 如何侦测数组的索引值的变化 2.3 如何监听数组内容的增加或减少? 2.4 使用Proxy来实现数据监听 三. Observer源码解析 回到顶部 一. 什么是响应式? 我们可以这样理解,当一个数据状态发生改变的时候,那么与这个数据状态相关的事务也会发生改变.用我们的前端专业术语来讲,当我们JS中的对象数据发生改变的时候,与JS中对象数据相关联的DOM

Vue.js响应式原理

本文和大家分享的主要是Vue.js 响应式原理相关内容,一起来看看吧,希望对大家 学习Vue.js有所帮助. 关于Vue.js Vue.js 是一款 MVVM 框架,上手快速简单易用,通过响应式在修改数据的时候更新视图. Vue.js 的响应式原理依赖于 Object.defineProperty  ,尤大大在Vue.js 文档中就已经提到过,这也是 Vue.js 不支持 E8 以及更低版本浏览器的原因. Vue 通过设定对象属性的  setter/getter  方法来监听数据的变化,通过 g

vue中响应式props办法

title: vue中响应式props办法 toc: false date: 2018-12-25 21:22:49 categories: Web tags: Vue 更新props数据时,使用this.$set: this.$set(this.data, "key", "value") 原文地址:https://www.cnblogs.com/zmj97/p/10180677.html

Elastislide - 响应式的图片循环展示效果

Elastislide 是一款非常优秀的响应式 jQuery 图片循环展示(旋转木马)插件,集成了 Touchwipe 插件以支持触屏设备.提供了四种效果:水平图片传送带.垂直图片传送带.固定在屏幕底部以及缩略图形式预览. 效果演示      插件下载 您可能感兴趣的相关文章 网站开发中很有用的 jQuery 效果[附源码] 分享35个让人惊讶的 CSS3 动画效果演示 十分惊艳的8个 HTML5 & JavaScript 特效 Web 开发中很实用的10个效果[源码下载] 12款经典的白富美型

vue基础响应式数据

1.vue 采用 v……vm……m,模式,v---->el,vm---->new Vue(实例),m---->data 数据,让前端从操作大量的dom元素中解放出来. 2.vue响应式数据是怎么做到的? 通过Object.defineproperty数据劫持 1 //vue 响应式数据是怎么做到的:数据劫持 Object.defineproperty 2 let obj = { 3 name:"小明", 4 age:32, 5 info:{ 6 b:10 7 } 8

vue的响应式原理

Vue 最独特的特性之一,是其非侵入性的响应式系统.数据模型仅仅是普通的 JavaScript 对象.而当修改它们时,视图会进行更新. 当我们把一个普通的 JavaScript 对象传给 Vue 实例的 data 选项,Vue 将遍历此对象所有的属性,并使用  Object.definedProperty  把这些属性全部转为  getter/setter .Object.defineProperty 是 ES5 中一个无法 shim 的特性,这也就是为什么 Vue 不支持 IE8 以及更低版本

Vue.js 响应式原理

1. Vue2.x 基于 Object.defineProperty 方法实现响应式(Vue3将采用proxy) Object.defineProperty(obj, prop, descriptor) 2. 定义defineReactive来对对象的属性进行getter.setter操作 function defineReacive(obj, key, val){ Object.defineProperty(obj, key, { enumerable: true, configurable:

vue的响应式原理分析

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8" /> 5 <meta name="viewport" content="width=device-width, initial-scale=1"> 6 <title></title> 7 </head> 8 <body>