您好,登錄后才能下訂單哦!
這篇文章主要講解了“vue中如何封裝echarts公共組件”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“vue中如何封裝echarts公共組件”吧!
定義圖表公共樣式是為了統一同一網站各頁面圖表的基礎樣式baseOption.js(軸線、區域、色系、字體),統一封裝后頁面需要直接引入,傳入所需參即可覆蓋基礎樣式。
npm install echarts --save npm install lodash --save // 若已安裝請忽略
import ElementUI from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; Vue.use(ElementUI);
baseOption.js文件:公共樣式定義,為了統一同網站各種圖表的基礎樣式,比如軸線、圖各板塊顏色,值僅供參考):
// baseOption.js export default { color: [ "#0067E1", "#0CC1FF", "#00D1B3", "#85E814", "#FFA082", ], tooltip: {}, legend: { orient:'horizontal', type:'scroll', pageIconSize:12, pageIconColor:'#aaa', pageIconInactiveColor :'#2f4554', pageTextStyle:{ color:'#999999' }, itemWidth:20, itemHeight:12, top:0, textStyle:{ color:'#999999' }, }, grid: { top: "13%", left: "3%", right: "10%", bottom: "2%", containLabel: true, }, xAxis: [ { axisLine: { lineStyle: { color: "rgba(65, 97, 128, 0.15)", // type: "dashed", }, }, axisTick: { show: false, }, axisLabel: { interval:0, color: "#rgba(0, 0, 0, 0.25)", textStyle: { fontSize: 10, } }, nameTextStyle:{ color:'#999999', fontSize: 10, }, }, ], yAxis: [ { axisLabel: { color: "#rgba(0, 0, 0, 0.25)", textStyle: { fontSize: 11, }, }, axisLine: { lineStyle: { color: "rgba(65, 97, 128, 0.15)", }, }, splitLine: { lineStyle: { color: "rgba(65, 97, 128, 0.15)", }, }, axisTick: { show: false, }, nameTextStyle:{ color:'#999999', fontSize: 10, padding:[0,20,0,0] }, minInterval: 1 }, ], };
Echart.vue文件:圖本身組件
// Echart.vue <template> <div :id="elId" /> </template>
<script> import echarts from "echarts"; import { merge, debounce } from "lodash"; // 引入公共樣式 import baseOption from "./baseOption" export default { data() { return { elId: "", vOption: { series: [], }, }; }, props: { optionData: Object, }, computed: { // 合并配置對象 option() { return merge({}, baseOption, this.vOption, this.optionData); }, }, created() { this.elId = this.uuid(); }, mounted() { // 實例化echarts對象 this.$nextTick(() => { this.initChart(); }); }, beforeDestroy() { if (!this.chart) { return; } this.chart.dispose(); this.chart = null; }, watch: { optionData: { deep: true, handler: function() { this.$nextTick(() => { this.initChart(); }); }, }, }, methods: { // 生成唯一uuid做為唯一標識符 uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16); }); }, // 繪圖 initChart() { if(!document.getElementById(this.elId)) return this.chart = echarts.init(document.getElementById(this.elId)); this.chart.setOption(this.option); const that = this; window.addEventListener( "resize", debounce(() => { // 引入debounce,防止頻繁更改瀏覽頁尺寸出現頁面抖動 if (that.chart) { that.chart.resize(); } }, 100) ); }, }, }; </script>
傳入目標數據就可以了,以下示例數據為餅圖:
// index.vue <template> <div class="chartBox"> <Chart :optionData="chartData"></Chart> </div> </template>
<script> // 引入Echart.vue組件 import Chart from "./Echart.vue"; export default { components: { Chart, }, data() { return { // 圖目標數據 chartData: { tooltip: { show:true, trigger:'item', formatter: "{b} : {c} (aegqsqibtmh%)", }, xAxis: [{ show: false }], yAxis: [{ show: false }], series: [ { name: "訪問來源", type: "pie", // 餅圖 radius: ["30%", "45%"], // 餅圖大小 data: [ { value: 1048, name: "搜索引擎" }, { value: 735, name: "直接訪問" }, { value: 580, name: "郵件營銷" }, { value: 484, name: "聯盟廣告" }, { value: 300, name: "視頻廣告" }, ], }, ], }, }; }, }; </script>
此時好看的餅圖就出現啦~~
感謝各位的閱讀,以上就是“vue中如何封裝echarts公共組件”的內容了,經過本文的學習后,相信大家對vue中如何封裝echarts公共組件這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。