場景
SpringBoot+Vue+Echarts實現選擇時間范圍內數據加載顯示柱狀圖:
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/121555526
在上面的博客頁面是父組件,時間選擇器是父組件的標簽,柱狀圖是引用的子組件。
實現在父組件選擇時間后調用子組件的方法重新渲染柱狀圖。
注:
博客:
https://blog.csdn.net/badao_liumang_qizhi
關注公眾號
霸道的程序猿
獲取編程相關電子書、教程推送與免費下載。
實現
1、子組件BarChartDataRange聲明name屬性
export default { name: "BarChartDateRange", data() { return {
2、父組件中引入子組件
import BarChartDateRange from "@/components/Echarts/BarChartDateRange"; export default { name: "Blog", components: { BarChartDateRange, }, data() { return {
3、父組件中添加子組件顯示並設置ref屬性
<BarChartDateRange ref="BarChartDateRange"></BarChartDateRange>
4、父組件中調用子組件方法
this.$refs.BarChartDateRange.getSelectedRangeList(val);
5、子組件完整代碼
<template> <div :style="{ height: '300px', width: '300px' }" /> </template> <script> import echarts from "echarts"; require("echarts/theme/macarons"); // echarts theme import request from '@/utils/request' import { formatDate } from "@/utils/index"; export default { name: "BarChartDateRange", data() { return { chart: null, typeData: [ { product: "2021.11.23", 博客數: 20 }, { product: "2021.11.24", 博客數: 30 }, { product: "2021.11.25", 博客數: 35 }, { product: "2021.11.26", 博客數: 43 }, ], yAxisMax: 0, queryParam: { beginDate: null, endDate: null, }, }; }, created() { //默認開始時間為一周前 this.queryParam.beginDate = formatDate( new Date().getTime() - 60 * 1000 * 60 * 24 * 6 ); //默認結束時間時間當前時間 this.queryParam.endDate = formatDate(new Date().getTime()); this.getList().then((response) => { var res = response.data; if (res) { //清空柱狀圖的數據源 this.typeData = []; //遍歷后台響應數據,構造柱狀圖數據源 for (var key in res) { this.typeData.push({ product: key, 博客數: res[key] }); } } this.initChart(this.typeData); }); }, mounted() {}, methods: { //調用后台接口查詢數據 getList() { return request({ url: "/system/blog/list", method: "get", params: this.queryParam, }); }, //父組件調用子組件的該方法進行重新渲染柱狀圖 getSelectedRangeList(range) { var startDate = range[0]; var endDate = range[1]; this.queryParam.beginDate = startDate; this.queryParam.endDate = endDate; this.getList().then((response) => { var res = response.data; if (res) { this.typeData = []; for (var key in res) { this.typeData.push({ product: key, 博客數: res[key] }); } } this.initChart(this.typeData); }); }, initChart(typeData) { this.chart = echarts.init(this.$el, "macarons"); this.chart.setOption({ tooltip: { trigger: "axis", axisPointer: { // 坐標軸指示器,坐標軸觸發有效 type: "shadow", // 默認為直線,可選為:'line' | 'shadow' }, }, grid: { top: 10, left: "2%", right: "2%", bottom: "3%", containLabel: true, }, legend: { //圖例 data: ["博客數"], }, xAxis: [ { type: "category", axisPointer: { type: "shadow", }, axisLabel: { interval: 0, rotate: 40, }, }, ], yAxis: [ { type: "value", name: "單位:(條)", min: 0, max: 30, interval: 10, axisLabel: { formatter: "{value}", }, }, ], dataset: { source: typeData, }, series: [ { name: "博客數", type: "bar", barWidth: "40%", }, ], }); }, }, }; </script>
6、父組件完整代碼
<template> <div> <div> <BarChartDateRange ref="BarChartDateRange"></BarChartDateRange> </div> <div class="block"> <el-date-picker size="large" type="daterange" v-model="value1" range-separator="至" start-placeholder="開始日期" end-placeholder="結束日期" @change="dateSelectChange" :value-format="dateFormat" > </el-date-picker> </div> </div> </template> <script> import BarChartDateRange from "@/components/Echarts/BarChartDateRange"; export default { name: "Blog", components: { BarChartDateRange, }, data() { return { value1: "", dateFormat: "yyyy-MM-dd", }; }, created() { }, methods: { /** 查詢博客列表 */ dateSelectChange(val) { if (val) { var startDate = new Date(val[0]).getTime(); var endDate = new Date(val[1]).getTime(); debugger; if (endDate - startDate > 6 * 24 * 60 * 60 * 1000) { this.$message({ message: "所選時間范圍不能大於7天", type: "warning", }); }else{ this.$refs.BarChartDateRange.getSelectedRangeList(val); } } }, }, }; </script>