Maison > interface Web > Voir.js > Quelle est la méthode de composition des graphiques Vue3 et d'utilisation des hooks pour le redimensionnement ?

Quelle est la méthode de composition des graphiques Vue3 et d'utilisation des hooks pour le redimensionnement ?

王林
Libérer: 2023-05-23 13:34:42
avant
1744 Les gens l'ont consulté

    composantisation et redimensionnement des graphiques à l'aide de hooks

    hook est essentiellement une fonction qui encapsule l'API de composition utilisée dans la fonction de configuration

    Quelle est la méthode de composition des graphiques Vue3 et dutilisation des hooks pour le redimensionnement ?

    Instance echarts composée

    <template>
      <div ref="echart" :></div>
    </template>
    
    <script setup>
    import * as echarts from "echarts";
    import useResize from "@/hooks/useResize"; // hook 代码见下方
    
    const { proxy } = getCurrentInstance(); // 获取实例中的proxy
    
    let echart;
    let echartInstance;
    
    const props = defineProps({
      // 数据
      data: {
        type: Array,
        default: [
          { value: 40, name: "rose 1" },
          { value: 38, name: "rose 2" },
          { value: 32, name: "rose 3" },
        ],
      },
      // 高度
      height: {
        type: [Number, String],
        default: "300px",
      },
      // 宽度
      width: {
        type: [Number, String],
        default: "100%",
      },
    });
    
    const { data } = toRefs(props);
    
    const data1 = reactive({
      option: {
        legend: {
          top: "bottom",
        },
        toolbox: {
          show: false,
          feature: {
            mark: { show: true },
            dataView: { show: true, readOnly: false },
            restore: { show: true },
            saveAsImage: { show: true },
          },
        },
        tooltip: {
          trigger: "item",
          formatter: "{b} : {c} ({d}%)",
        },
        series: [
          {
            name: "Nightingale Chart",
            type: "pie",
            radius: [10, 120],
            center: ["50%", "45%"],
            roseType: "area",
            itemStyle: {
              borderRadius: 8,
            },
            data: data.value,
          },
        ],
      },
    });
    
    const { option } = toRefs(data1);
    
    // 观察 data ,重新绘制
    watch(
      data,
      (newValue) => {
        option.value.series[0].data = newValue;
      },
      { deep: true }
    );
    watch(
      option,
      (newValue) => {
        echartInstance.setOption(newValue, true);
      },
      { deep: true }
    );
    
    onMounted(() => {
      echart = proxy.$refs.echart; // 获取的DOM根节点
      echartInstance = echarts.init(echart, "macarons"); // 初始化 echart
      echartInstance.setOption(option.value, true); // 绘制
      // notMerge 可选。是否不跟之前设置的 option 进行合并。默认为 false。即表示合并。合并的规则,详见 组件合并模式。如果为 true,表示所有组件都会被删除,然后根据新 option 创建所有新组件。
      // setOption 见 https://echarts.apache.org/zh/api.html#echartsInstance.setOption
    });
    
    function resize() {
      echartInstance.resize();
    }
    
    // 暴露函数 (供hook调用)
    defineExpose({
      resize,
    });
    
    useResize();
    </script>
    Copier après la connexion

    hook (useResize)

    export default function () {
        let proxy
    
        onMounted(() => {
            proxy = getCurrentInstance(); // 获取实例中的proxy
            window.addEventListener(&#39;resize&#39;, resize)
        })
    
        onBeforeUnmount(() => {
            window.removeEventListener(&#39;resize&#39;, resize)
        })
    
        function resize() {
            proxy.exposed.resize()
        }
    }
    Copier après la connexion

    Utilisation graphiques et graphiques adaptatif

    Installez d'abord echarts, je ne le présenterai pas, je parlerai juste de comment l'utiliser.

    <!-- 创建一个div去显示echarts -->
    <div ref="main" ></div>
    Copier après la connexion
    import {ref, provide, inject, onMounted, reactive} from "vue";
    import * as echarts from "echarts";
    const main = ref() // 使用ref创建虚拟DOM引用,使用时用main.value
    onMounted(
        () => {
            init()
        }
    )
    function init() {
        // 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(main.value);
        // 指定图表的配置项和数据
        var option = {
            /*title: {
                text: &#39;ECharts 入门示例&#39;
            },*/
            tooltip: {},
            // color:[&#39;#779ffe&#39;,&#39;#a07dfe&#39;,&#39;#fc9b2e&#39;,&#39;#63f949&#39;,&#39;#fb6464&#39;,&#39;#fce481&#39;],
            /*grid: {
                left: &#39;30%&#39;,
                right: &#39;4%&#39;,
                bottom: &#39;3%&#39;,
                containLabel: true
            },*/
            legend: {
                // data: [&#39;国家类型&#39;,&#39;非国家类型&#39;,&#39;个人&#39;,&#39;法人&#39;,&#39;可公式&#39;,&#39;非公式&#39;]
            },
            xAxis: {
                type: &#39;category&#39;,
                data: [&#39;国家类型&#39;,&#39;非国家类型&#39;,&#39;个人&#39;,&#39;法人&#39;,&#39;可公式&#39;,&#39;非公式&#39;]
            },
            yAxis: {
                type: &#39;value&#39;,
                scale: true,
                max: 150,
                min: 0,
                splitNumber: 3,
            },
            series: [
                {
                    data: [
                        {
                            value: 120,
                            itemStyle: {
                                color: &#39;#7fa6fe&#39;
                            }
                        },
                        {
                            value: 90,
                            itemStyle: {
                                color: &#39;#a17fff&#39;
                            }
                        },
                        {
                            value: 40,
                            itemStyle: {
                                color: &#39;#fda630&#39;
                            }
                        },
                        {
                            value: 120,
                            itemStyle: {
                                color: &#39;#93fc73&#39;
                            }
                        },
                        {
                            value: 120,
                            itemStyle: {
                                color: &#39;#fb6666&#39;
                            }
                        },
                        {
                            value: 120,
                            itemStyle: {
                                color: &#39;#fbe068&#39;
                            }
                        }
                    ],
                    type: &#39;bar&#39;
                }
            ]
        };
        // 使用刚指定的配置项和数据显示图表。
        myChart.setOption(option);
    }
    Copier après la connexion

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

    Étiquettes associées:
    source:yisu.com
    Déclaration de ce site Web
    Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
    Tutoriels populaires
    Plus>
    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal