效果图:

1.1renderjs引入echarts

组件zmui-echarts.vue:

<template>
	<view class="zmui-echarts" :prop="option" :change:prop="echarts.delay"></view>
</template>

<script>
	export default {
		name: 'zmuiEcharts',
		props: {
			option: {
				type: Object,
				required: true
			}
		}
	}
</script>

//使用renderjs 就让app拥有类似有.HTML文件的环境 能直接挂载.js的能力
<script module="echarts" lang="renderjs"> 
	export default {
		data() {
			return {
				timeoutId: null,
				chart: null
			}
		},
		mounted() {
			if (typeof window.echarts === 'object') {
				this.init()
			} else {
				// 动态引入类库
				const script = document.createElement('script') //创建个标签
				script.src = './static/echarts.min.js'  //引入echarts.min.js
				script.onload = this.init
				document.head.appendChild(script) //全局挂载echarts.min.js
			}
		},
		methods: {
			/**
			 * 初始化echarts
			 */
			init() {
				// 根据id初始化图表
				this.chart = echarts.init(this.$el)
				this.update(this.option)
			},
			/**
			 * 防抖函数,500毫秒内只运行最后一次的方法
			 * @param {Object} option
			 */
			delay(option) {
				if (this.timeoutId) {
					clearTimeout(this.timeoutId)
					this.timeoutId = null
				}
      this.timeoutId = setTimeout(() => {
					this.update(option)
				}, 500)
			},
			/**
			 * 监测数据更新
			 * @param {Object} option
			 */
			update(option) {
				console.log('option', option)
				if (this.chart) {
					// 因App端,回调函数无法从renderjs外传递,故在此自定义设置相关回调函数
					if (option) {
						// tooltip
						if (option.tooltip) {
							// 判断是否设置tooltip的位置
							if (option.tooltip.positionStatus) {
								option.tooltip.position = this.tooltipPosition()
							}
							// 判断是否格式化tooltip
							if (option.tooltip.formatterStatus) {
								option.tooltip.formatter = this.tooltipFormatter(option.tooltip.formatterUnit, option.tooltip.formatFloat2,
									option.tooltip.formatThousands)
							}
						}

						// legend
						if (option.legend) {
							console.log('option.legend', option.legend)
							if (Object.prototype.toString.call(option.legend) == '[object Array]') {
								for (let i in option.legend) {
									if (option.legend[i].formatterStatus) {
										option.legend[i].formatter = this.legendFormatter(option.legend[i].formatterType, option.legend[i].formatterArr)
									}
								}
								console.log(12)
							} else {
								if (option.legend.formatterStatus) {
									console.log(56)
									// option.legend.formatter = this.legendFormatter(option.legend.formatterType, option.legend.formatterArr)
									// option.legend.formatter = function(value) {
									// 	return '1'
									// }
								}
								console.log(34)
							}
						}

						// y轴
						if (option.yAxis) {
							if (option.yAxis.axisLabel) {
								if (option.yAxis.axisLabel.formatterStatus) {
									option.yAxis.axisLabel.formatter = this.yAxisFormatter(option.yAxis.axisLabel.formatterData)
								}
							}
							
							if (option.yAxis[0].axisLabel.water) {
									let currentChooseName = option.yAxis[0].axisLabel.water.currentChooseName
									let name = option.yAxis[0].axisLabel.water.name
									console.log('name========>', name,currentChooseName)
									option.yAxis[0].axisLabel.formatter =  function(value) {
										let level = null
										if (currentChooseName == '西铝饮用水' || currentChooseName == '和尚山') {
											if (name == 'CODMn') {
												switch (value) {
													case 2:
														level = 2.0;
														break;
													case 4:
														level = 4.0;
														break;
													case 6:
														level = 6.0;
														break;
													case 10:
														level = 10.0;
														break;
												}
												return level;
											}else if (name == 'TP') {
												switch (value) {
													case 0.02:
														level = 0.02;
														break;
													case 0.1:
														level = 0.1;
														break;
													case 0.2:
														level = 0.2;
														break;
													case 0.3:
														level = 0.3;
														break;
												}
												return level;
												
											}else if (name == 'DO') {
												switch (value) {
													case 7.5:
														level = 7.5;
														break;
													case 6:
														level = 6.0;
														break;
													case 5:
														level = 5.0;
														break;
													case 3:
														level = 3.0;
														break;
												}
												return level;
											}else if (name == 'TN') {
												switch (value) {
													case 0.2:
														level = 0.2;
														break;
													case 0.5:
														level = 0.5;
														break;
													case 1:
														level = 1.0;
														break;
													case 1.5:
														level = 1.5;
														break;
												}
												return level;
											} else if (name == 'NH3-N') {
												switch (value) {
													case 0.15:
														level = 0.15;
														break;
													case 0.5:
														level = 0.5;
														break;
													case 1:
														level = 1.0;
														break;
													case 1.5:
														level = 1.5;
														break;
												}
												return level;
											}
											
										}else if(currentChooseName !== '西铝饮用水' || currentChooseName !== '和尚山') {
											if (name == 'CODMn') {
												switch (value) {
													case 4:
														level = 4.0;
														break;
													case 6:
														level = 6.0;
														break;
													case 10:
														level = 10.0;
														break;
														case 15:
															level = 15.0;
															break;
												}
												return level;
											}else if (name == 'TP') {
												switch (value) {
															
													case 0.1:
														level = 0.1;
														break;
													case 0.2:
														level = 0.2;
														break;
													case 0.3:
														level = 0.3;
														break;
														case 0.4:
															level = 0.4;
															break;
												}
												return level;
											} else if (name == 'DO') {
												switch (value) {
													
													case 6:
														level = 6.0;
														break;
													case 5:
														level = 5.0;
														break;
													case 3:
														level = 3.0;
														break;
														case 2:
															level = 2.0;
															break;
												}
												return level;
											}else if (name == 'TN') {
												switch (value) {
													
													case 0.5:
														level = 0.5;
														break;
													case 1:
														level = 1.0;
														break;
													case 1.5:
														level = 1.5;
														break;
														case 2:
															level = 2.0;
															break;
												}
																			
												return level;
											} else if (name == 'NH3-N') {
												switch (value) {							
													case 0.5:
														level = 0.5;
														break;
													case 1:
														level = 1.0;
														break;
													case 1.5:
														level = 1.5;
														break;
														case 2:
															level = 2.0;
															break;
												}
												return level;
											}
										} 
										
									}
							}
						}

						// 颜色渐变
						if (option.series) {
							for (let i in option.series) {
								let linearGradient = option.series[i].linearGradient
								if (option.series[i].axisLabel && option.series[i].axisLabel.formatterText) {
									option.series[i].axisLabel.formatter = function(value) {
										if (value === 0) {
											return '0 \n 健康';
										} else if (value === 1) {
											return '50 \n 优';
										} else if (value === 2) {
											return '100 \n 良';
										} else if (value === 3) {
											return '150 \n 轻度';
										} else if (value === 4) {
											return '200 \n 中度';
										} else if (value === 5) {
											return '300 \n 重度';
										} else if (value === 6) {
											return '500 \n 严重';
										}
									}
								}
								if (linearGradient) {
									option.series[i].color = new echarts.graphic.LinearGradient(linearGradient[0], linearGradient[1],
										linearGradient[2], linearGradient[3], linearGradient[4])
								}

								if (option.series[i].itemStyle) {
									if (option.series[i].itemStyle.normal) {
										if (option.series[i].itemStyle.normal.formatterColor) {
											option.series[i].itemStyle.normal.color = this.colorFormatter(option.series[i].itemStyle.normal.formatterType,option.series[i])
										}
									}
								}

								if (option.series[i].markLine) {
									if (option.series[i].markLine.label) {
										if (option.series[i].markLine.label.normal) {
											if (option.series[i].markLine.label.normal.formatterLabel) {
												option.series[i].markLine.label.normal.formatter = this.labelFormatter(option.series[i].markLine.label.normal
													.formatterType, option.series[i].markLine.label.normal.formatterValue)
											}
										}
									}
								}
							}
						}
					}
					
					console.log(option)
					this.chart.clear() // 这个不要删掉哟,不然切换不同图形的时候会有bug
					// 设置新的option
					this.chart.setOption(option, option.notMerge)
				}
			},
			waterFormatterYAxis (value) {
				/* let name = null
				switch (value) {
					case 2:
						name = 2.0;
						break;
					case 4:
						name = 4.0;
						break;
					case 6:
						name = 6.0;
						break;
					case 10:
						name = 10.0;
						break;
				} */
				console.log('value', value)
				// return name;
			},
			/**
			 * 设置tooltip的位置,防止超出画布
			 */
			tooltipPosition() {
				return (point, params, dom, rect, size) => {
					// 其中point为当前鼠标的位置,size中有两个属性:viewSize和contentSize,分别为外层div和tooltip提示框的大小
					let x = point[0]
					let y = point[1]
					let viewWidth = size.viewSize[0]
					let viewHeight = size.viewSize[1]
					let boxWidth = size.contentSize[0]
					let boxHeight = size.contentSize[1]
					let posX = 0 // x坐标位置
					let posY = 0 // y坐标位置
					if (x >= boxWidth) { // 左边放的下
						posX = x - boxWidth - 1
					}
					if (y >= boxHeight) { // 上边放的下
						posY = y - boxHeight - 1
					}
					return [posX, posY]
				}
			},
			/**
			 * tooltip格式化
			 * @param {Object} unit 数值后的单位
			 * @param {Object} formatFloat2 是否保留两位小数
			 * @param {Object} formatThousands 是否添加千分位
			 */
			tooltipFormatter(unit, formatFloat2, formatThousands) {
				return params => {
					if (Array.isArray(params)) {
						var params = params[0]
						// #ifdef H5
						var result = params.data.fullDate + '/n' + params.seriesName + ":" + params.data.value
						// #endif
						// #ifdef APP-PLUS
						var result = params.data.fullDate + '</br>' + params.seriesName + ":" + params.data.value
						// #endif
					} else {
						// #ifdef H5
						var result = params.data.fullDate + '/n' + params.seriesName + ":" + params.data.value
						// #endif
						// #ifdef APP-PLUS
						var result = params.data.fullDate + '</br>' + params.seriesName + ":" + params.data.value
						// #endif
					}
					return result
				}
			},
			/**
			 * 保留两位小数
			 * @param {Object} value
			 */
			formatFloat2(value) {
				let temp = Math.round(parseFloat(value) * 100) / 100
				let xsd = temp.toString().split('.')
				if (xsd.length === 1) {
					temp = (isNaN(temp) ? '0' : temp.toString()) + '.00'
					return temp
				}
				if (xsd.length > 1) {
					if (xsd[1].length < 2) {
						temp = temp.toString() + '0'
					}
					return temp
				}
			},
			/**
			 * 添加千分位
			 * @param {Object} value
			 */
			formatThousands(value) {
				if (value === undefined || value === null) {
					value = ''
				}
				if (!isNaN(value)) {
					value = value + ''
				}
				let re = /\d{1,3}(?=(\d{3})+$)/g
				let n1 = value.replace(/^(\d+)((\.\d+)?)$/, function(s, s1, s2) {
					return s1.replace(re, '$&,') + s2
				})
				return n1
			},

			/**
			 * Y轴格式化
			 * @param {Object} data
			 */
			yAxisFormatter(data) {
				return params => {
					let result = []
					for (let i in data) {
						if (params == i) {
							result.push(data[i])
						}
					}
					return result
				}
			},
			/**
			 * legend 格式
			 * @param {Object} Type
			 * @param {Object} Arr
			 */
			legendFormatter(Type, Arr) {
				console.log('Arr', Arr)
				return params => {
					let result = ""
					var total = 0;
					for (var i = 0, l = Arr.length; i < l; i++) {
						total += Arr[i].value;
				    }
					let res = Arr.filter(v => v.name === params)
					let val = res[0].value
					let precent=((val/total)*100).toFixed(2) + '%'
					// #ifdef H5
					result = params +"("+ val+"件)"
					// #endif
					// #ifdef APP-PLUS
					result = params +"("+ val+"件)"
					// #endif
					return result
				}
			},
			/**
			 * 颜色设置
			 * @param {Object} Type
			 */
			colorFormatter(Type,series) {
				let value  =0;
				return params => {
					//如果series 里面包含aqiData 数据 按AQI 的值来渲染颜色
					let value =params.value;
					 if(series['aqiData']!=null){
						value =series['aqiData'][params.dataIndex];
					} 
					let result = ""
					if (Type === 'one') {
						result = "rgb(126,0,35)"
						if (value > 0 && value < 51) {
							result = "#00e400"
						} else if (value >= 51 && value < 101) {
							result = "#ffff00"
						} else if (value>= 101 && value < 151) {
							result = "#ff7e00"
						} else if (value >= 151 && value < 201) {
							result = "#ff0000"
						} else if (value >= 201 && value < 301) {
							result = "#7e0023"
						}
					}
					return result
				}
			},
			/**
			 * 标记线
			 * @param {Object} Type
			 * @param {Object} Value
			 */
			labelFormatter(Type, Value) {
				return params => {
					let result = ""
					if (Type === 'one') {
						result = Value
					}
					return result
				}
			},
		}
	}
</script>

<style scoped>
	.zmui-echarts {
		width: 100%;
		height: 100%;
	}
</style>

2.使用<zmuiEcharts  :option="echartOptions"></zmuiEcharts>

import zmuiEcharts from '@/components/zmui-echarts/zmui-echarts.vue'
components: {
			zmuiEcharts
		},
<zmuiEcharts  :option="echartOptions"></zmuiEcharts>

export default {
    data(){
        return{
            echartOptions: {
					backgroundColor: '#ffffff',
					title: {
						text: 'mg/L',
						textStyle: {
							fontSize: 12,
							fontWeight: 'normal',
							color: '#858585', //标题颜色
						},
						top: 0,
						left: '4%',
					},
					tooltip: {
						show: false
						// axisPointer: {
						// 	type: "axis",
						// 	textStyle: {
						// 		color: "#000"
						// 	}
						// },
						// formatter: (data) => {
						// 	// 可以自定义文字和样式,用行内样式,数据包含在data参数中
						// 	let text = ` ${data.name}:${data.value}`
						// 	return text
						// }
					},
					grid: {
						top: "5%",
						right: "3%",
						bottom: '13%',
					},
					xAxis: [{
						data: [],
						margin: 20,
						interval: 0,
						rotate: 40,
						color: '#858585',
						textStyle: {
							fontSize: 12
						},
						axisLine: {
							lineStyle: {
								color: '#858585',
							}
						},
						axisTick: {
							show: true
						},
					}],
					axisLine: {
						show: false,
						lineStyle: {
							color: '#858585', //y轴颜色
						}
					},
					axisTick: {
						show: false
					},
					splitLine: {
						show: false
					},
					dataZoom: [{
							"show": true,
							"height": 8,
							"xAxisIndex": [
								0
							],
							bottom: '0%',
							start: 0,
							end: 6,
							handleIcon: "M-292,322.2c-3.2,0-6.4-0.6-9.3-1.9c-2.9-1.2-5.4-2.9-7.6-5.1s-3.9-4.8-5.1-7.6c-1.3-3-1.9-6.1-1.9-9.3c0-3.2,0.6-6.4,1.9-9.3c1.2-2.9,2.9-5.4,5.1-7.6s4.8-3.9,7.6-5.1c3-1.3,6.1-1.9,9.3-1.9c3.2,0,6.4,0.6,9.3,1.9c2.9,1.2,5.4,2.9,7.6,5.1s3.9,4.8,5.1,7.6c1.3,3,1.9,6.1,1.9,9.3c0,3.2-0.6,6.4-1.9,9.3c-1.2,2.9-2.9,5.4-5.1,7.6s-4.8,3.9-7.6,5.1C-285.6,321.5-288.8,322.2-292,322.2z",
							handleSize: "130%",
							handleStyle: {
								color: "#fff",
								shadowColor: "#B1B5B9",
								shadowBlur: 5,
							},
							backgroundColor: "#DEE3F4",
							fillerColor: "#008efe",
							endValue: 5,
						},
						{
							"type": "inside",
							"show": true,
							"height": 15,
							"start": 1,
							"end": 35
						}
					],
					yAxis: [{
						type: 'value',
						min: 0,
						max: 0,
						interval: 0.01,
						name: 'nj',
						nameTextStyle: {
							color: '#ffffff'
						},
						axisLine: {
							show: true
						},
						axisTick: {
							show: false
						},
						splitLine: {
							show: false,
						},
						axisLabel: {
							color: '#858585',
							textStyle: {
								fontSize: 13
							},
							formatter: function(value1) {
								return value1;
							},
							water: {
								name: 'water',
								code: 'code'
							},
				
						},
				
					}],
				
				
					series: [{
						label: {
							normal: {
								show: true,
								color: '#333',
								position: 'top',
							}
						},
						name: 'nj',
						type: 'bar',
						data: [],
						barWidth: '8px',
						itemStyle: {
							normal: {
								formatterColor: true,
								formatterType: "one",
							}
						},
					}]
				}
        }
    }
}


				

相关文章

React 中引入 CSS 高阶用法

组件式开发选择合适的`css`解决方案尤为重要通常会遵循以下规则:- 可以编写局部css,不会随意污染其他组件内的原生;- 可以编写动态的css,可以获取当前组件的一些状态,根据状态的变化生成不同的css样式;- 支持所有的css特性:伪类、动画、媒体查询等;- 编写起来简洁方便、最好符合一贯的css风格特点

【Vue3】使用ref与reactive创建响应式对象

先来简单介绍一下ref,它可以定义响应式的变量let xxx = ref(初始值)。**返回值:**一个RefImpl的实例对象,简称ref对象或refref对象的value属性是响应式的。JSxxx.value,但模板中不需要.value,直接使用即可。对于let name = ref('张三')来说,name不是响应式的,name.value是响应式的。下面我们看一看上图红框中代表的意思是,我们哪里需要响应就在哪个里面导入上述代码即可。

如何使用阿里云OSS进行前端直传

在使用阿里云OSS进行前端直传时,首先我们需要去阿里云官网注册自己的存储桶,然后申请相关的accessKeyId和accessKeySecret,然后新建一个桶,为这个桶命名以及选择对应的地区。然后可以根据自己的业务,封装对应的组件,以下是根据我自己的项目,所封装的上传组件,所用的是React技术栈。

5年前端老司机:浅谈web前端开发技术点

且不说眼下市面在有这么多的浏览器,就只单一的IE系列家族的问题也够多的了,特别是IE6,IE7。我觉得比一般的后台开发更复杂。这还是一个比較新的职业,对一些规范和最佳实践的研究都处于探索阶段,一些新的技术随时都会闪现出来,比如:浏览器大战也越来越白热化,跨浏览器兼容方案依旧五花八门,眼下我所在的公司一般要求我们兼容到IE7,曾经常常遇到这样的情况。在开发过程中涵盖的东西很宽广,既要从技术的角度来思考界面的实现,规避技术的死角,又要从用户的角度来思考,如何才干更好地接受技术呈现的枯燥的数据,更好的呈现信息。

C# winfrom中excel文件导入导出

在C#交流群里,看到很多小伙伴在excel数据导入导出到C#界面上存在疑惑,所以今天专门做了这个主题,希望大家有所收获!环境:win10+vs2017界面:主要以演示为主,所以没有做优化,然后主界面上添加两个按钮,分别命名为ExportExcel和ImportExcel,添加两个dataGridView,分别是dataGridView1和dataGridView2然后在窗体加载程序中给dataGr...

HTML5和CSS3强化知识总结

之前总结定位元素水平垂直居中时,top left均为50%,之后margin-top为-高度的一半,margin-left为-宽度的一半,即可实现,但这一旦改变盒子的宽高,也得改变marign值,故tranform:translate(-50%,-50%)很方便的避免了频繁改动数据的问题。利用阴影进行动画设置,先利用定位将阴影与圆点放置合适位置,用一个盒子将其包含,让阴影水平垂直居中放置在盒子中,此时圆点就会在阴影正中间,利用动画将阴影的宽高调大,之后每个阴影进行延迟即可。

npm淘宝镜像过期解决办法

因为npm 官方镜像(registry.npmjs.org)在国内访问很慢,我们基本上都会选择切换到国内的一些 npm 镜像(淘宝镜像、腾讯云镜像等)。由于淘宝原来的镜像(registry.npm.taobao.org)HTTPS 证书正式到期,因此需要切换到淘宝最新的镜像,否则会出现证书到期异常。

Web 安全之点击劫持(Clickjacking)攻击详解

点击劫持(Clickjacking)攻击,又称为界面伪装攻击,是一种利用视觉欺骗手段进行攻击的方式。攻击者通过技术手段欺骗用户点击本没有打算点击的位置,当用户在被攻击者攻击的页面上进行操作时,实际点击结果被劫持,从而被攻击者利用。这种攻击方式利用了用户对网站的信任,通过覆盖层(通常是透明的iframe)覆盖在另一个网页之上,使受害者无法察觉。

如何在html5中的canvas绘制文本自动换行?

​在固宽的 canvas 中,字数过多的时候,并不会自动换行,我们可以增加 canvas 本身的宽度,但这不是解决问题的根本方法。还记得之前介绍 canvas 基本 api 的时候,有一个函数,这个函数可以测量字体的宽高度,那就好办了,我们计算好我们字符串的长度加上一个大概的宽度,基本上可以处理这种换行的问题了。​,保存开始截取的最后的索引,当循环变量 i 为最后一个字符的时候,直接绘制剩余部分。​,如果大于 canvas 的宽度,就截取这部分进行绘制,然后重置​。

鸿蒙(ArkUI)开发:实现二级联动

列表的二级联动(Cascading List)是指根据一个列表(一级列表)的选择结果,来更新另一个列表(二级列表)的选项。这种联动可以使用户根据实际需求,快速定位到想要的选项,提高交互体验。例如,短视频中拍摄风格的选择、照片编辑时的场景的选择,本文即为大家介绍如何开发二级联动。

Vue和React的区别 | | React函数式写法和类写法的区别

React 更多的是一个库而不是框架,它更专注于视图层的管理,通过社区和第三方库来进行补充和扩展。类式组件: 类式组件是 ES6 中引入的 class 类的一种用法,它继承自 React.Component,拥有完整的生命周期和内部状态管理能力。它是无状态的,没有生命周期和内部状态。而在 React 中,我们使用 JSX 语法,它是一种 JavaScript 的扩展语法,可以在 JavaScript 中直接编写类似 HTML 的结构。在 React 中,我们可以定义组件的两种方式,即函数式组件和类式组件。

微信小程序 自定义组件和生命周期

类似vue或者react中的自定义组件⼩程序允许我们使⽤⾃定义组件的⽅式来构建⻚⾯。类似于页面,一个自定义组件由 json wxml wxss js 4个文件组成可以在微信开发者⼯具中快速创建组件的⽂件结构在⽂件夹内 components/myHeader ,创建组件 名为 myHeader⾸先要在⻚⾯的 json ⽂件中进⾏引⽤声明。还要提供对应的组件名和组件路径index.wxml// 引用声明// 要使用的组件的名称 // 组件的路径&lt; view &gt;

Promise和箭头函数和普通函数的区别

箭头函数与普通函数的区别在于: 1、箭头函数没有this,所以需要通过查找作用域链来确定this的值,这就意味着如果箭头函数被非箭头函数包含,this绑定的就是最近一层非箭头函数的this, 2、箭头函数没有自己的arguments对象,但是可以访问外围函数的arguments对象 3、不能通过new关键字调用,同样也没有new.target值和原型。6、箭头函数没有自己的arguments,可以在箭头函数中使用rest参数代替arguments对象,来访问箭头函数的参数列表。

HarmonyOS应用开发之DevEco Studio安装与初次使用

DevEco Studio是基于IntelliJ IDEA Community开源版本打造,面向华为终端全场景多设备的一站式集成开发环境(IDE),为开发者提供工程模板创建、开发、编译、调试、发布等E2E的HarmonyOS应用/服务的开发工具

React Query 实战教程:在 React 中如何优雅的管理接口数据状态?

如何通过Ajax或者Fetch优雅的请求后端接口,这是所有复杂前端项目都需要考虑处理的事情。在React项目中,有不少成熟的Hook能够让开发者管理整个请求过程中的数据和状态,例如use-httpswr甚至ahook中提供的useRequest。我曾经很长一段时间是直接使用ahook中的useRequest,但是有的项目中不需要ahook中的其他hook,我又不愿意仅仅为了使用useRequest而在项目中引入ahook。就像我第参与的一个前端项目中仅仅为了使用jquery的$.ajax而引入。

【Vue入门】语法 —— 插值、指令、过滤器、计算属性、监听器

Vue.js 使用了基于 HTML 的模板语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据。所有 Vue.js 的模板都是合法的 HTML ,所以能被遵循规范的浏览器和 HTML 解析器解析。vue将模板编译成虚拟dom,结合响应系统,Vue 能够智能地计算出最少需要重新渲染多少组件,并把 DOM 操作次数减到最少。这是一种基于字符串的模板技术,以字符串和数据为输入,通过用正则表达式将占位符替换为所需数据的方式,构建出完整的 HTML 字符串。

100天精通Python(可视化篇)——第101天:Pyecharts绘制多种炫酷仪表盘图参数说明+代码实战

一、仪表盘图介绍 1. 仪表盘图是什么? 2. 仪表盘图应用场景二、仪表盘图类配置选项 1. 导包 2. add函数 3. 仪表盘标题配置 4. 仪表盘数据内容配置 5. 仪表盘进度条配置 6. 仪表盘指针指针配置 7. 仪表盘标记点配置三、仪表盘图实战 1. 基础仪表盘图 2. 改变轮盘内的字体 3. 修改仪表盘不同区间颜色 4. 修改仪表盘刻度分割段数 5. 修改仪表盘半径大小
返回
顶部