我有以下Vue.js绑定的HTML:
<span :class="[obj.status === 'Online' ? 'badge-success' : 'badge-danger', 'badge badge-pill']">{{obj.status}}</span>
我要添加另一个变体:
如果obj.status === 'Updating'
,则该类应为badge-warning
。
有效实现此目标的最佳方法是什么?我想我可以在现有的三元组中添加另一个三元组,但是看起来很乱。
答案 0 :(得分:0)
如果状态不在线(如下面所示),您可以添加另一个三级运算符
<span :class="[obj.status === 'Online' ? 'badge-success' : (obj.status === 'updating'?'badge-warning':'badge-danger'), 'badge badge-pill']">{{obj.status}}</span>
答案 1 :(得分:0)
一种方法是将您的类分配转换为方法:
new Vue({
el: "#app",
data: {
myValues: [
{status: 'Online'},
{status: 'Updating'}
]
},
methods: {
assignedClasses(status) {
var classToAssign;
if(status === 'Online'){
classToAssign = 'badge-success';
}
else if(status === 'Updating') {
classToAssign = 'badge-warning';
}
else {
classToAssign = 'badge-danger';
}
return classToAssign;
}
}
})
<link href="https://unpkg.com/bootstrap@4.1.1/dist/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<div v-for="(obj, index) in myValues" :key="index">
<span class="badge badge-pill" :class="assignedClasses(obj.status)">{{obj.status}}</span>
</div>
</div>
答案 2 :(得分:0)
<span v-if="obj.status === 'Online'" class="badge-success">
{{obj.status}}
</span>
<span v-if="obj.status === 'Updating'" class="badge-warning">
{{obj.status}}
</span>
<span v-if="obj.status !== 'Updating' && obj.status !== 'Online'" class="badge-default">
{{obj.status}}
</span>
您可以根据status属性有条件地进行渲染。
另一种方法是切换类的大小写:
new Vue({
el: "#app",
data: {
obj: {
status: 'Online'
}
},
methods: {
getBadgeClass(status) {
switch(status) {
case 'Online':
return 'badge-success';
case 'Updating':
return 'badge-warning';
default:
return 'badge-default'
}
}
}
})
,然后在您的模板中执行以下操作:
<span :class="getBadgeClass(obj.status)">{{obj.status}}</span>
答案 3 :(得分:0)
添加多个条件的一种方法可以是
<span
:class="[{'badge-success':obj.status === 'Online', 'badge-warning':obj.status === 'Updating', 'badge-danger':obj.status === 'Failed'},'badge badge-pill']"
>
{{obj.status}}
</span>