当前位置: 代码迷 >> 综合 >> iview - table slot-scope 根据不同状态改变内容颜色(动态追加render函数)
  详细解决方案

iview - table slot-scope 根据不同状态改变内容颜色(动态追加render函数)

热度:86   发布时间:2023-11-21 06:17:50.0

以下介绍 iview - table slot-scope 两种方法,根据不同状态改变内容颜色(1. 动态追加render函数, 2. 在columns里根据数组存储状态数据循环判断显示),以及动态实现序号的显示和隐藏功能

效果图
在这里插入图片描述

  1. 动态追加render函数
<template><div><Button @click="handleShowIndex()">{
    {
    indexShow ? '隐藏序号': '显示序号'}}</Button><Button @click="addRender()">给状态列动态添加render</Button><Table :columns="columns" :data="data"><template v-for="item in columns"  slot-scope="{ row, index }" :slot="item.slot"><span>  {
    {
    row[item.slot]}}</span></template></Table></div></template>
<script>export default {
    mounted(){
    //定时器模拟动态添加数据setTimeout(()=>{
    this.columns = [{
    title: '姓名',slot: 'name',},{
    title: '状态',slot: 'state',},{
    title: '地址',slot: 'address'}]this.data = [{
    name: '王小明',state: '小学',address: '北京市朝阳区芍药居'},{
    name: '张小刚',state: '初中',address: '北京市海淀区西二旗'},{
    name: '李小红',state: '高中',address: '上海市浦东新区世纪大道'},{
    name: '周小伟',state: '大学',address: '深圳市南山区深南大道'}]},3000)},data () {
    return {
    indexShow: false,total: 10,current: 1,pageSize: 5,columns: [],data: []}},methods:{
    handleShowIndex(){
    this.indexShow = !this.indexShow;if(this.indexShow){
    this.columns.unshift({
    type: 'index',title: '序号',width: 70,align: 'center',indexMethod: (row) => {
    return (row._index + 1) + (this.pageSize * this.current) - this.pageSize;}});}else {
    this.columns.forEach((item,i)=>{
    if(this.columns[i].type == 'index' ){
    this.columns.splice(i,1);}})}},addRender(){
    for(let i =0; i< this.columns.length; i++){
    if(this.columns[i].slot == 'state'){
    this.columns[i].render = (h, params) => {
    return h('div', [h('span', {
    style: {
    color: params.row.state == "初中" ? '#0a0' : ( params.row.state == "高中" ? '#f00' : '#666' )}},params.row.state)]);}this.$set(this.columns, i, this.columns[i]);}}}}}
</script>
  1. 根据数组存储状态数据循环判断显示
<template><div><Button @click="handleShowIndex()">{
    {
    indexShow ? '隐藏序号': '显示序号'}}</Button><Table :columns="columns" :data="data" style="margin-bottom: 20px"><template v-for="item in columns"  slot-scope="{ row, index }" :slot="item.slot"><div v-if="item.stateArr"    :style="{color: columnColor(item.stateArr,data[index][item.slot]) == null ? '#ddd' : columnColor(item.stateArr,data[index][item.slot])}"><span> {
    {
     row[item.slot]}} </span></div><div  v-if="!item.stateArr"><span> {
    {
     row[item.slot]}} </span></div></template></Table></div></template>
<script>export default {
    mounted(){
    setTimeout(()=>{
    this.columns = [{
    title: '姓名',slot: 'name'},{
    title: '状态',slot: 'state',//用数组存储状态数据stateArr:[{
    text: '初中', color:'#0a0'},{
    text: '高中', color: '#f00'}]},{
    title: '地址',slot: 'address'}]this.data = [{
    name: '王小明',state: '小学',address: '北京市朝阳区芍药居'},{
    name: '张小刚',state: '初中',address: '北京市海淀区西二旗'},{
    name: '李小红',state: '高中',address: '上海市浦东新区世纪大道'},{
    name: '周小伟',state: '大学',address: '深圳市南山区深南大道'}]},3000)},data () {
    return {
    indexShow: false,total: 10,current: 1,pageSize: 5,columns: [],data: [ ]}},methods:{
    columnColor(list,data){
    let color = null;for(let i = 0; i < list.length; i++){
    if(list[i].text == data){
    color = list[i].color;}}return color;},handleShowIndex(){
    this.indexShow = !this.indexShow;if(this.indexShow){
    this.columns.unshift({
    type: 'index',title: '序号',width: 70,align: 'center',indexMethod: (row) => {
    return (row._index + 1) + (this.pageSize * this.current) - this.pageSize;}});}else {
    this.columns.forEach((item,i)=>{
    if(this.columns[i].type == 'index' ){
    this.columns.splice(i,1);}})}}}}
</script>
  相关解决方案