template:
<template>
<div>
<el-tag v-model="tag" style="cursor:pointer" v-for="(item, index) in items" size="small" @click="changeColor(index)"
:key="index" :effect="item.tagEffect">
{{ item.label }}
</el-tag>
</div>
</template>
script :
<script>
import {getDetail,getTag} from "@/api";
export default {
data() {
return {
items: [],
tagList: [],
}
},
methods: {
// 动态获取详情
async getDetail(id) {
await this.getTag();//因为我们需要
let param = {
id: id,
}
getDetail(param).then((res) => {
this.tagList = res.resultdata.tag
const tagLabel = data.resultdata.tag;
if (tagLabel) {
// 不爲空的的時候
let labelList = tagLabel.split(',')
this.tagList = labelList;
this.items.forEach(e => {
if (labelList.includes(e.label)) {
this.$set(e, 'tagEffect', 'dark')
}
})
}
this.dialogVisible = true;
this.$forceUpdate();
})
},
//items是动态获取的
getTag() {
return new Promise((resolve, reject) => {//添加异步是因为在详情的时候数据都获取到了,你去遍历的时候,那个 items 是空的,所以需要添加异步
const params = {
// 传必传参数
};
getTag(params).then((res) => {
if (res.result) {
const items = [];
res.resultdata.forEach(function (obj, index) {
items.push({
label: obj.labelName,
index: index,
tagEffect: `plain`,//一开始是没有高亮的
});
});
this.items = items;
}
resolve()
}).catch(() => {
reject
});
})
},
changeColor(id) {
// 点击改变tag的颜色
this.items[id].tagEffect =
this.items[id].tagEffect == `plain` ? `dark` : `plain`;
this.tagList = [];
for (let i = 0; i < this.items.length; i++) {
if (this.items[i].tagEffect == `dark`) {//黑色
this.tagList.push(this.items[i].label);
}
}
},
}
}
</script>
完成上述操作就能实现el-tag的详情数据回显效果了