我有一个基于这样的计算属性呈现的表。请注意每一行如何根据其内容获取其样式。这很管用。
computed: { rows: function () { return this.$store.getters.tableRows; }, ... }
<tr v-for="row in rows" v-bind:class="rowClass(row)">
<td v-for="(item, key, index) in row.columns" v-bind:class="classy(index)">{{item}}</td>
</tr>
我还想在表格之外添加一个集体信息,所以我设置了以下有条件的消息传递。
computed: {
finished: function () {
return this.rows.length === 5;
},
whoopsie: function () {
return this.rows[this.rows.length - 1].columns.elapsed < 0;
}, ...
}
<div v-if="finished" class="alert alert-success">Done.</div>
<div v-if="whoopsie" class="alert alert-warning">Oops.</div>
第一个按预期工作。但是,第二个给我一个错误,无法读取 undefined 的属性“列”,这看起来很疯狂,因为我可以清楚地看到屏幕上的数据并且长度属性绝对不为零。
我尝试使用调试器命令在那里四处寻找,但似乎没有在代码的那部分调用。我知道代码会被执行,因为将return false更改为return true确实会产生差异。调试器似乎可以在代码的其他地方工作。诡异的...
我试图将值存储到全局变量中,如下所示。从控制台窗口插入该变量会产生我期望的值。我不明白那里发生了什么,但这绝对是一些黑魔法。
whoopsie: function () {
window.wtf = this.rows[this.rows.length - 1];
// return true;
return false;
}, ...
- 我可以做些什么来获得计算属性中的值?
- 为什么它不做一个理智的人所期望的?
- 如何在那里调用调试器?
编辑
商店有以下吸气剂。
tableRows: function(state) { return state.dataTable.rows; }
它被分配给以下对象。数据中的每一行都有一个 ID 和一个容器列。
const rows = [];
for (let i = 0; data && i < data.length; i++)
rows.push({
id: data[i].id,
columns: {
...
elapsed: recalculate(data[i].span)
}
});
我想绑定到两个计算属性,如果表中的行数为 5(即完成),并且如果最后一行的elapsed值为负(即woopsie),这两个计算属性将为真。这就是为什么我要宣布这两个(并且只有第一个在工作)。