计算 属性 或根据 Vue 中 v-for 内的值更改样式的其他方式
Computed property or other way to change style depending on value inside v-for in Vue
我有这样的组件:
Vue.component('mcp-item', {
template: '#mcp-item-template',
data() {
return {
name: "MCP v2",
version: "2.0",
imei: 'XXXXXX XX XXXXXX X',
relays: [
{ name : "REL1", state : 0 },
{ name : "REL2", state : 0 }
],
inputs: [
{ name: "BP1", state: 0, color: "#CC0000" },
{ name: "BP2", state: 0, color: "#CC0000" },
{ name: "BP3", state: 1, color: "#00CC00" },
{ name: "BP4", state: 0, color: "#CC0000" },
{ name: "BP5", state: 0, color: "#CC0000" },
{ name: "BP6", state: 0, color: "#CC0000" }
],
}
},
methods: {
reboot: function (event) { alert( this.imei) }
}
})
在组件模板的某处:
<table>
<thead>
<tr>
<th>Input</th>
<th>State</th>
</tr>
</thead>
<tbody v-for="input in inputs" :key="input.name">
<tr>
<td :style="{ 'color': input.color}">{{input.name}}</td>
<td>{{input.state}}</td>
</tr>
</tbody>
</table>
如您所见,现在我的对象中有专用的 color
字段(这是 data
中 inputs
数组的元素):
JS:
{ name: "BP1", state: 0, color: "#CC0000" }
HTML:
<td :style="{ 'color': input.color}">{{input.name}}</td>
我想摆脱这个额外的 属性,但我不知道如何在 v-for 循环中使用计算的 属性 来制作红色state==0 的颜色和 state==1 的绿色.
也许计算 属性 是一种矫枉过正 - 简单条件呢:
<td :style="{ 'red': input.state === 0, 'green': input.state === 1}">...// </td>
我不会创建一个计算 属性 或将逻辑添加到模板中,而是创建一个如下所示的方法 getColor(state)
:
getColor(state) {
let color = '';
if (state === 0) {
color = 'red';
} else if (state === 1) {
color = 'green';
}
return { color };
}
或者,如果唯一的值是 0
和 1
,您可以将其缩短为:
getColor(state) {
const color = state === 0 ? 'red' : 'green';
return { color };
}
然后这样称呼它:
<td :style="getColor(input.state)">{{input.name}}</td>
我有这样的组件:
Vue.component('mcp-item', {
template: '#mcp-item-template',
data() {
return {
name: "MCP v2",
version: "2.0",
imei: 'XXXXXX XX XXXXXX X',
relays: [
{ name : "REL1", state : 0 },
{ name : "REL2", state : 0 }
],
inputs: [
{ name: "BP1", state: 0, color: "#CC0000" },
{ name: "BP2", state: 0, color: "#CC0000" },
{ name: "BP3", state: 1, color: "#00CC00" },
{ name: "BP4", state: 0, color: "#CC0000" },
{ name: "BP5", state: 0, color: "#CC0000" },
{ name: "BP6", state: 0, color: "#CC0000" }
],
}
},
methods: {
reboot: function (event) { alert( this.imei) }
}
})
在组件模板的某处:
<table>
<thead>
<tr>
<th>Input</th>
<th>State</th>
</tr>
</thead>
<tbody v-for="input in inputs" :key="input.name">
<tr>
<td :style="{ 'color': input.color}">{{input.name}}</td>
<td>{{input.state}}</td>
</tr>
</tbody>
</table>
如您所见,现在我的对象中有专用的 color
字段(这是 data
中 inputs
数组的元素):
JS:
{ name: "BP1", state: 0, color: "#CC0000" }
HTML:
<td :style="{ 'color': input.color}">{{input.name}}</td>
我想摆脱这个额外的 属性,但我不知道如何在 v-for 循环中使用计算的 属性 来制作红色state==0 的颜色和 state==1 的绿色.
也许计算 属性 是一种矫枉过正 - 简单条件呢:
<td :style="{ 'red': input.state === 0, 'green': input.state === 1}">...// </td>
我不会创建一个计算 属性 或将逻辑添加到模板中,而是创建一个如下所示的方法 getColor(state)
:
getColor(state) {
let color = '';
if (state === 0) {
color = 'red';
} else if (state === 1) {
color = 'green';
}
return { color };
}
或者,如果唯一的值是 0
和 1
,您可以将其缩短为:
getColor(state) {
const color = state === 0 ? 'red' : 'green';
return { color };
}
然后这样称呼它:
<td :style="getColor(input.state)">{{input.name}}</td>