公司用uni-app做的echarts,本以为直接从pc端代码复制过来就可以了,不出来是一个问题,出来了格式不对又是一个问题,毕生所学都学以致用了,我可真是个菜比。
菜话不多说。
这里是uni-app app端用echarts的官方教程,bug很多,咱也没办法,入了坑就只能用。
如果是循环echarts的话,可以把官方示例封装成组件,在组件初始化dom,外部只需要传入option和id。
遇到的难题如下:(下面有一句话错误,js垃圾回收对它是有办法的,和其他没有通过eval创建的代码一样,只不过动态作用域不好理解,对我们这种新手不友好。)
头疼的厉害,这几天看美剧良医,总感觉因为写代码长了个脑瘤,真难受。希望所有写代码的人都能够不急不慌,健健康康,睡饱吃香,没有痔疮。好朴实的愿望。
这是转换代码,不是纯工具函数,所以根据自己的项目自行修改。
/* 如果有函数则转字符串,并加标识符 */
const json = (obj) => {
for(let i in obj) {
if (typeof obj[i] === 'object') {
json(obj[i])
} else if(typeof obj[i] === 'function' && i !== 'handleAction'){
obj[i] = obj[i].toString() + '$func$tion$'
}
}
return obj
}
/* 解析字符串函数,创建动态作用域并改变this指向 */
const parse = (obj) => {
for(let i in obj) {
if (typeof obj[i] === 'object') {
parse(obj[i])
} else {
if (typeof obj[i] === 'string' && obj[i].includes('$func$tion$')) {
var a
obj[i] = obj[i].replace(/\$func\$tion\$/g, '')
obj[i] = eval('a =' + obj[i])
if (obj['datas']) {
obj[i] = obj[i].bind(obj['datas'])
}
}
}
}
return obj
}
我写了一个示例项目,放在github上。
https://github.com/Jkssns/echarts-template