javascript - 如何在回调中停止无限递归
问题描述
我一直在试图理解为什么以及如何修复legendCallback
Vue 的 Vue 图表中发生的这种无限递归,但无济于事。非常感谢您的帮助。
在我的 Vue 组件中,选项在方法中定义为:
options() {
var self = this;
return {
legend: {
display: false,
position: 'top',
},
legendCallback: chart=> {
return this.generateLegendData(chart)
},
tooltips: {
mode: 'single',
callbacks: {
label: function (tooltipItems) {
return "text"
}
},
}
}
},
我的 generateLegendData 方法如下所示:
generateLegendData(chart) {
var labels = ["SolarCity", "Einstein", "SpaceX", "Mars", "Tesla"];
var backgroundColor = [
"rgba(242,58,48, 0.1)",
"rgba(110,75,63,1)",
"rgba(55,72,172,1)",
"rgba(0,39,39,1)",
"rgba(166,176,69,1)"
];
var text = [];
text.push('<ul class="' + chart.id + '-legend">');
for (var i = 0; i < labels.length; i++) {
text.push(
'<li><span style="background-color:' + backgroundColor[i] + '">'
);
if (labels[i]) {
text.push(labels[i]);
console.log(labels[i]);
}
text.push("</span></li>");
}
text.push("</ul>");
return text.join("");
}
如果没有 for 循环,即只返回预期的字符串,它就可以正常工作。
解决方案
返回return text.join("")
不是问题。
解决方案是将options
属性从方法移动到计算属性。
推荐阅读
- javascript - 为什么我的 setState 函数会覆盖当前状态?
- ionic-framework - 通过文件传输插件 ionic 3 发送多个图像
- amazon-web-services - 如果节点数量达到阈值,是否可以使用 Kubernetes Cluster Autoscaler 来扩展节点?
- c - 如何将 asn1_create_element 用于嵌套方案?
- reactjs - 为什么在 redux 开发工具中更新了状态,但在真实状态 redux 中没有更新
- function - Symfony 4 - 使用参数制作 Doctrine findBy 的一些困难
- r - 在 pkgdown 函数参考页 (R) 中创建小节
- android - 不在 logcat 中打印 recyclerView 的位置
- android - Android Studio 3.5 版导航抽屉
- ruby-on-rails - 网站展示“欢迎使用 nginx!” 作为首页索引 Rails App