elemment-ui实现表格render函数

最近做项目的时候,多个页面用到element-ui表格相同的功能,所以就封装一下,考虑不周的地方,忘指出!!!
//子组件

<template>
  <el-table :data="tableList">
    <template v-for="item in propList">
    //1、这个是匿名插槽就是  父组件下面有内容的时候,不渲染<slot>不渲染内容</slot>
    //比如<child><div>3333</div></child>
   //要是父组件比如<child></child>里面没有内容的时候,就会渲染
   //<slot></slot>里面的内容
      <slot :content="item">
        <el-table-column
          :key="item.id"
          :prop="item.prop"
          :label="item.label"
        ></el-table-column>
      </slot>
    </template>
  </el-table>
</template>
<script>
export default {
  props: {
    propList: {
      type: Array,
      default: () => [],
    },
    tableList: {
      type: Array,
      default: () => [],
    },
  },
};
</script>




父组件里面

  <base-render-table :propList="propList" :tableList="tableList">
      <!-- 这里的判断逻辑  是如果有render函数,就直接渲染这个模板   没有就渲染子组件中的匿名插槽 -->
      <template slot-scope="{ content }" v-if="content.render">
        <el-table-column :label="content.label">
          <template slot-scope="{ $index, row }">
            <ex-slot
              :render="content.render"
              :row="row"
              :index="$index"
            />

          </template>
        </el-table-column>
      </template>
    </base-render-table>

var exSlot = {
  functional: true,
  props: {
    row: Object,
    render: Function,
    index: Number,
    column: {
      type: Object,
      default: null,
    },
  },
  render: (h, data) => {
    const params = {
      row: data.props.row,
      index: data.props.index,
    };
    console.log("data", params);
    return data.props.render(h, params);
  },
};


//exSlot执行顺序,先执行组件内render生命周期在执行父组件的render函数
export default {
  components: {
    exSlot,
  },
  data() {
    return {
        propList: [
        { label: "姓名", prop: "name", id: 1 },
        {
          label: "图片",
          prop: "pic",
          id: 2,
          render:(h, params) =>{
            let  array=[1,2]
            let  result = []
            array.forEach(v=>{
                 result.push(
                   h("img",{
                      style: {
                        marginRight: '5px',
                        width:"30px",
                      },
                      attrs:{
                        src:params.row.pic
                      }
                   })
                 )
            })
            return  h("div",{
             },
              result
            )
          }

          //return `<img style="width:30px;height:30px"  onClick='${deletes}'   src='${pic}' />`
        },
        {
          label: "操作",
          prop: "operate",
          id: 3,
           render: (h, params) => {
           
            return h("div", [
              h("el-button", {
                on: {
                  click: () => {
                    this.filterData();
                  },
                },
              },"修改"),

               h("el-button", {
                on: {
                  click: () => {
                    this.filterData();
                  },
                },
              },"删除"),
            ]);
          },
        },
      ],
      tableList: [
        {
          name: "章三",
          pic:
            "https://zh-static-files.oss-cn-hangzhou.aliyuncs.com//karazhan/content/poster/2019/11/16e30c192f6.png",
          text: "新增",
        },
        {
          name: "里斯",
          pic:
            "https://zh-static-files.oss-cn-hangzhou.aliyuncs.com//karazhan/content/poster/2019/11/16e30c2797e.png",
          text: "删除",
        },
        {
          name: "网舞",
          pic:
            "https://zh-static-files.oss-cn-hangzhou.aliyuncs.com//karazhan/content/poster/2019/11/16e30c33144.png",
          text: "跳转",
        },
      ],
   

  },
  mounted() {

  },
  methods: {
    filterData() {
      this.pagination.pageNum = 1;
      this.getProductList();
    },
   


  },
};


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值