element plus组件二次封装

本文探讨了如何对Element Plus的表格组件进行二次封装,主要关注自定义表格内容的问题。在Table.vue中,利用插槽实现表格结构的灵活填充。然而,遇到一个问题,用于循环的父盒子无法使用template并添加自定义属性,目前寻求解决方案。同时,O2O.vue组件展示了如何实际应用这些封装技巧,核心在于运用作用域插槽。

自定义表格

  1. Table.vue 表格模板,通过插槽进行填充不同的结构

问题:用来做循环的父盒子不能template 不能添加自定义属性。求大老解决

<template>
  <el-table :data="tableData" style="width: 100%" class="tab">
    <template  v-for="item in tabcur" :key="item">
      <el-table-column :label="item.labelName"  v-if="item.compon">
        <template #default="scope">
          <slot :name="item.fied" :rows="scope.row">
            <p>自定义的组件</p>
          </slot>
        </template>
      </el-table-column>

      <el-table-column :prop="item.fied" :label="item.labelName" v-else />
    </template>

    <el-table-column fixed="right" label="操作" width='160'>
      <template #default="scope">
        <el-button size=
### Element Plus 上传组件二次封装示例 #### 功能需求分析 为了满足更复杂的应用场景,对 `Element Plus` 的 `<el-upload>` 组件进行了二次封装,增加了校验、回显等功能[^2]。 #### 封装思路概述 通过对原始的 `<el-upload>` 进行扩展,在其基础上添加了额外的功能模块,如数据验证逻辑和已上传文件列表的状态管理。这种设计不仅提高了代码复用率,还增强了组件灵活性。 #### 实现细节说明 ##### 创建自定义 Upload 组件 首先创建一个新的 Vue 单文件组件 `CustomUpload.vue`: ```vue <template> <div> <!-- 自定义属性绑定 --> <el-upload v-bind="$attrs" :on-preview="handlePreview" :on-remove="handleRemove" :before-upload="beforeAvatarUpload" list-type="picture-card"> <i class="el-icon-plus"></i> </el-upload> <!-- 预览对话框 --> <el-dialog :visible.sync="dialogVisible"> <img width="100%" :src="dialogImageUrl" alt=""> </el-dialog> </div> </template> <script> export default { props: ['value'], // 接收父级传递的数据模型 data() { return { dialogImageUrl: '', dialogVisible: false, }; }, methods: { handlePreview(file) { this.dialogImageUrl = file.url; this.dialogVisible = true; }, handleRemove(file, fileList) { console.log('file removed:', file); console.log('remaining files:', fileList); }, beforeAvatarUpload(file) { const isJPG = file.type === 'image/jpeg'; const isLt2M = file.size / 1024 / 1024 < 2; if (!isJPG) { this.$message.error('上传头像图片只能是 JPG 格式!'); } if (!isLt2M) { this.$message.error('上传头像图片大小不能超过 2MB!'); } return isJPG && isLt2M; } } }; </script> ``` 此部分实现了基本的文件类型限制以及大小控制功能,并提供了简单的预览机制[^1]。 ##### 添加表单校验规则 为了让上传操作更加严谨可靠,可以在原有的基础上加入一些必要的输入检验规则。比如确保用户确实选择了有效的图像文件再提交表单。 ```javascript // 定义校验规则对象 const rules = reactive({ imageFile: [ { required: true, message: "请至少选择一张图片", trigger: ["change"] }, ], }); // 使用 FormItem 包裹 CustomUpload 并应用上述规则 <el-form-item prop="imageFile"> <custom-upload v-model="form.imageFile"/> </el-form-item> ``` 这里利用了 `v-model` 双向绑定了子组件中的值到父组件状态里,
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值