Q:修改option中的series的值時,當異步回來的數據層級較深時,需要調取Echarts的repaint,否則圖像不會刷新


legend的數據跟隨數據的增刪實時刷新,但曲線會取merge后的數據做展示
A:調用setOption的第二個參數(notMerge)
myChart.setOption(option, true)
選擇notMerge為true,即為不合并之前的數據
其中涉及Echarts底層mergeOption方法的原理,如下:
function mergeOption(oldOption, newOption, notMerge) {
if (notMerge) {
// 如果notMerge為true,則直接返回新的配置項
return newOption;
}
// 創建一個新的配置項對象,避免直接修改原始配置項
var mergedOption = {};
// 遍歷舊配置項,將其復制到新的配置項中
for (var key in oldOption) {
if (oldOption.hasOwnProperty(key)) {
mergedOption[key] = oldOption[key];
}
}
// 遍歷新配置項,將其合并到新的配置項中
for (var key in newOption) {
if (newOption.hasOwnProperty(key)) {
// 如果舊配置項中存在相同的屬性,則進行合并處理
if (mergedOption.hasOwnProperty(key)) {
// 對某些特殊屬性進行深度合并
if (key === 'series') {
mergedOption[key] = mergeSeries(mergedOption[key], newOption[key]);
} else {
mergedOption[key] = newOption[key];
}
} else {
// 如果舊配置項中不存在該屬性,則直接復制到新的配置項中
mergedOption[key] = newOption[key];
}
}
}
return mergedOption;
}
// 對系列(series)進行合并的輔助方法
function mergeSeries(oldSeries, newSeries) {
var mergedSeries = [];
// 遍歷舊系列,將其復制到新的系列中
for (var i = 0; i < oldSeries.length; i++) {
mergedSeries.push(oldSeries[i]);
}
// 遍歷新系列,將其合并到新的系列中
for (var i = 0; i < newSeries.length; i++) {
// TODO: 進行新舊系列的合并處理,可根據具體需求實現
mergedSeries.push(newSeries[i]);
}
return mergedSeries;
}
E:setOption參數列表
