【发布时间】:2020-06-03 23:54:46
【问题描述】:
我对 Vue.js 和 Buefy 很陌生,我相信我理解为什么会发生这种情况,但不知道如何解决。
我有一个按国家/地区排序的项目合作伙伴列表,我需要输出一个带有复选框的列表(无论如何我在页面上使用 Buefy)和国家名称作为标题(仅当有一个“新”国家时)。这以浏览器执行无限循环结束(通过 console.log 验证),Vue Devtools 发出警告“您可能在组件渲染函数中有无限更新循环”。
我相信这是因为更改 prevTitle 会触发重新渲染。我知道不可能将参数传递给计算属性,并且我无法使用我发现的任何技巧来使 partner.country 在那里可用。
var app = new Vue({
el: "#app",
data: {
prevTitle: ""
...
methods: {
changeCountryTitle(country) {
if (country != this.prevTitle) {
this.prevTitle = country;
return true;
}
return false;
}
<template v-for="partner in results">
<div v-if="changeCountryTitle(partner.country)">
{{ partner.country }}
</div>
<b-checkbox ... >{{ partner.name }}, ...</b-checkbox>
<br />
</template>
然后我尝试创建一个计算属性,在其中进行所有处理而不是模板中的 for 循环,并返回一个包含所有内容的字符串,包括 Buefy 标记,这将被调用
<span v-html="printPartnerList"></span>
但是那些 Buefy 标记不能正确呈现,只有 HTML 标记有效,浏览器会忽略 Buefy 标记,仅显示正常文本。
任何想法如何使它工作?暂时我会在名称等之后为每个合作伙伴打印国家/地区名称,但这不是应该的。
【问题讨论】:
-
什么是
results? -
您的方法正在根据 prevTitle 评估每个合作伙伴,以了解它是否应该从您的方法返回 true 或 false。但是您的方法会修改该变量。所以通过修改它,所有的合作伙伴都必须重新评估。
-
我从数据库中得到
results,它是包含id、name、国家等的对象。
标签: javascript vue.js vuejs2 buefy