w-form-select 组件中 分析 自定义属性 和 el-select 自带属性 的对比表格

server/2025/1/21 10:25:08/

以下是该组件中 自定义属性el-select 自带属性 的对比表格:

属性/功能自定义el-select 自带说明
label✔️自定义属性,用于设置表单项的标签。
prop✔️自定义属性,用于表单验证时的字段名。
labelWidth✔️自定义属性,用于设置标签的宽度。
labelAlign✔️自定义属性,用于设置标签的对齐方式。
tip✔️自定义属性,用于设置提示信息(显示在 el-tooltip 中)。
operateType✔️自定义属性,用于控制组件的行为(如 view 模式下禁用输入)。
inputWidth✔️自定义属性,用于设置输入框的宽度。
value✔️自定义属性,用于绑定 v-model 的值。
multiple✔️✔️自定义属性,用于控制是否支持多选;el-select 也支持该属性。
list✔️自定义属性,用于设置下拉框的选项数据。
optionLabel✔️自定义属性,用于指定选项的显示字段。
optionValue✔️自定义属性,用于指定选项的值字段。
placeholder✔️✔️自定义属性,用于设置占位符;el-select 也支持该属性。
inputEnd✔️自定义属性,用于在输入框后添加额外的内容。
allowCreate✔️✔️自定义属性,用于控制是否允许用户创建新选项;el-select 也支持该属性。
defaultFirstOption✔️✔️自定义属性,用于控制是否默认选中第一个选项;el-select 也支持该属性。
filterable✔️el-select 自带属性,用于启用搜索功能。
clearable✔️el-select 自带属性,用于启用清除按钮。
@input✔️el-select 自带事件,用于监听输入值的变化。
@change✔️el-select 自带事件,用于监听选择值的变化。
@visible-change✔️el-select 自带事件,用于监听下拉框的显示/隐藏状态变化。
el-option✔️el-select 自带组件,用于定义下拉框的选项。
el-tooltip✔️el-tooltip 是 Element UI 自带的组件,用于显示提示信息。
el-form-item✔️el-form-item 是 Element UI 自带的组件,用于包裹表单项。

总结

  • 自定义属性:主要用于扩展功能,如设置标签、宽度、提示信息等。
  • el-select 自带属性:主要用于控制下拉框的行为,如多选、搜索、清除等。
  • 自定义逻辑:通过 v-ifv-for 等指令实现动态渲染和逻辑控制。
<template><div class="wrap"><div class="box"><el-form-item :label="label" :prop="prop" :label-width="labelWidth"><div slot="label" :style="`text-align: ${labelAlign};`"><span>{{ label }}<el-tooltip class="item" effect="dark" :content="tip || label || placeholder" placement="bottom-start"><i class="el-icon-warning-outline" /></el-tooltip></span></div><span v-if="operateType === 'view'"><template v-if="multiple">{{ list && list.length && list.filter(o => val.includes(o[optionValue])).map(o => o[optionLabel]).join(',') }}</template><template v-else><!-- {{ getSelectLabel(val) }} -->{{ list && list.length && list.find(o => val === o[optionValue]) && list.find(o => val === o[optionValue])[optionLabel] }}</template></span><el-selectv-elsev-model="val":multiple="multiple"filterableclearable:placeholder="placeholder || label || tip":allow-create="allowCreate":default-first-option="defaultFirstOption":style="inputWidth ? `width: ${inputWidth};` : `width: 100%;`"@input="value => $emit('input', value)"@change="value => $emit('change', value)"@visible-change="value => $emit('visible-change', value)"><el-optionv-if="list.length":label="` `":value="` `"/><el-optionv-for="(item, i) in list":key="'' + item[optionLabel] + item[optionValue] + i":label="item[optionLabel]":value="item[optionValue]"/></el-select><template v-if="inputEnd">&nbsp;&nbsp;&nbsp;&nbsp;</template>{{ inputEnd }}</el-form-item></div></div>
</template>
<script lang="ts">javascript">
import { Component, Vue, Prop, Emit, Watch } from 'vue-property-decorator'
import { AppModule } from '@/store/modules/app'
import { UserModule } from '@/store/modules/user'@Component({name: 'w-form-input',components: {}
})export default class extends Vue {@Prop({ default: '' })public label!: string@Prop({ default: '' })public prop!: string@Prop({ default: '160px' })public labelWidth: string@Prop({ default: 'right' })public labelAlign: string@Prop({ default: '' })public tip?: string@Prop({ default: '' })public operateType!: string@Prop({ default: false })@Prop({ default: '100%' })public inputWidth?: string@Prop({ default: '' })public value?: any@Prop({ default: false })public multiple: boolean@Prop({ default: () => [] })public list!: any@Prop({ default: '' })public optionLabel: string@Prop({ default: 'value' })public optionValue: String@Prop({ default: '' })public placeholder?: string@Prop({ default: '' })public inputEnd?: string@Prop({ default: false })public allowCreate?: boolean@Prop({ default: false })public defaultFirstOption?: boolean@Watch('list')watchList(v: any) {this.selList = v}@Watch('value')watchValue(v: any) {this.val = v}private multipleFlag: boolean = falseprivate selList: any = this.listprivate val: any = this.value
}
</script>
<style scoped lang="scss">
.wrap {width: 100%;.box {width: 100%;}
}
</style>

在这里插入图片描述


http://www.ppmy.cn/server/160152.html

相关文章

Taro+Vue实现图片裁剪组件

cropper-image-taro-vue3 组件库 介绍 cropper-image-taro-vue3 是一个基于 Vue 3 和 Taro 开发的裁剪工具组件&#xff0c;支持图片裁剪、裁剪框拖动、缩放和输出裁剪后的图片。该组件适用于 Vue 3 和 Taro 环境&#xff0c;可以在网页、小程序等平台中使用。 源码 https:…

IDEA导入Maven工程不识别pom.xml

0 现象 把阿里 sentinel 项目下载本地后&#xff0c;IDEA 中却没显示 maven 工具栏。 1 右键Maven Projects 点击IDEA右侧边栏的Maven Projects&#xff0c;再点击&#xff1a; 在出现的选择框中选择指定的未被识别的pom.xml即可&#xff1a; 2 Add as maven project 右键p…

嵌入式硬件篇---PID控制

文章目录 前言第一部分&#xff1a;连续PID1.比例&#xff08;Proportional&#xff0c;P&#xff09;控制2.积分&#xff08;Integral&#xff0c;I&#xff09;控制3.微分&#xff08;Derivative&#xff0c;D&#xff09;控制4.PID的工作原理5..实质6.分析7.各种PID控制器P控…

vue3 el-table 根据id合并指定列单元格

参考文章&#xff1a;https://www.cnblogs.com/gggggggxin/p/14311726.html 在mounted方法中调用 onMergeLines() const onMergeLines () > {// 先给所有的数据都加一个v.rowspan 1tableData.value.forEach((item) > {item.rowspan 1})// 双层循环for (let i 0; i…

Vue3中ref和reactive的区别

在 Vue 3 中&#xff0c;ref 和 reactive 都是用于响应式编程的 API&#xff0c;但它们有不同的使用场景和行为。以下是它们之间的区别&#xff1a; 1. ref 用途&#xff1a;用于创建基本数据类型&#xff08;如字符串、数字、布尔值&#xff09;或对象的响应式引用。数据类型…

ios文件管理,沙盒机制以及如何操作“文件”APP,把文件共享到文件app

首先&#xff0c;系统是一个整体&#xff0c;那每个app是相互独立的&#xff0c;系统为每个app分配了一定的存储空间&#xff0c;也就是我们说的沙盒&#xff0c;每个app有自己独立的沙盒&#xff0c;文件存储在沙盒中&#xff0c;正常情况下app相互之间数据是不可以共享以及访…

2024:成长、创作与平衡的年度全景回顾

文章目录 1.前言2.突破自我&#xff1a;2024年个人成长与关键突破3.创作历程&#xff1a;从构想到落笔&#xff0c;2024年的文字旅程4.生活与学业的双重奏&#xff1a;如何平衡博客事业与个人生活5.每一步都是前行&#xff1a;2024年度的挑战与收获6.总结 1.前言 回首2024年&a…

华为云Ubuntu中安装配置PostgreSQL与PostGIS

在安装前&#xff0c;确保云服务器安全组放开5432端口。我的云服务器系统为Ubuntu server 64bit&#xff0c;参考如下网址分享的教程进行PostgreSQL与PostGIS的安装。 https://www.cnblogs.com/echohye/p/18005445 https://zhuanlan.zhihu.com/p/467644334 https://cn.linux-c…