el-select获取id和name

         一般选中节点时只会将:value绑定的数据给v-model中,要想获取id和name一并传给后端,需要如下几步:

        1、给选择框添加点击事件 @input="selectChangeParent" 

        2、v-for中多添加一个参数 index

<el-select v-model="inputForm.projectId" filterable placeholder="请选择"         
           @input="selectChangeParent">
              <el-option
                  v-for="(item, index) in projectInfo"
                  :key="item.id"
                  :label="item.name"
                  :value="item.id">
              </el-option>
</el-select>

        3、添加选择框点击事件的方法 

          selectChangeParent(index){
                let listData=[];
                listData = this.projectInfo;
                for (let i = 0; i <listData.length ; i++) {
                    if ( listData[i].id==this.inputForm.projectId){
                        this.inputForm.projectName=listData[i].name
                    }

                }
            },

        这是我在data中下拉框的数据结构 

                projectInfo: {
                    id: '',
                    name: ''
                },

         总体思路,点击事件触发时获取到点击的id后,再和v-for绑定的数组做对比,对比时projectInfo的id和点击选择的id相同时,给inputForm里的对象赋值

完整代码:

<%
layout("/include/_vue_body.html", {title:"列表", parent:"隐患处理"}){
%>
<style>
    body {
        background: #ffffff !important;
    }
</style>
<div id="app" class="bg-white">
    <el-form :model="inputForm" size="small" ref="inputForm" v-loading="loading"
             label-width="120px">
        <el-row :gutter="15">
            <el-col :span="12">
                <el-form-item label="隐患名称" prop="hiddenName"
                              :rules="[
                  {required: true, message:'隐患名称不能为空', trigger:'blur'}
                 ]">
                    <el-input v-model="inputForm.hiddenName" placeholder="请填写隐患名称" maxlength="25"></el-input>
                </el-form-item>
            </el-col>
            <el-col :span="12">
                <el-form-item label="整改措施" prop="hiddenMeasurId"
                              :rules="[
                 ]">
                    <el-select v-model="inputForm.hiddenMeasurId" filterable placeholder="请选择">
                        <el-option
                                v-for="item in hiddenMeasureList"
                                :key="item.id"
                                :label="item.measureName"
                                :value="item.id">
                        </el-option>
                    </el-select>
                </el-form-item>
            </el-col>
            <el-col :span="12">
                <el-form-item label="整改负责人" prop="principal"
                              :rules="[
                 ]">
                    <fs-user-select
                            :is_layer="true"
                            :limit="1"
                            :value="inputForm.principal"
                            @get-value="(value) => { inputForm.principal = value}"></fs-user-select>
                </el-form-item>
            </el-col>
            <el-col :span="12">
                <el-form-item label="整改监督人" prop="supervision"
                              :rules="[
                 ]">
                    <fs-user-select
                            :is_layer="true"
                            :limit="1"
                            :value="inputForm.supervision"
                            @get-value="(value) => { inputForm.supervision = value}"></fs-user-select>
                </el-form-item>
            </el-col>
            <el-col :span="12">
                <el-form-item label="隐患类型" prop="hiddenType"
                              :rules="[
                 ]">
                    <el-select v-model="hiddenType" @change="selectProjectType">
                        <el-option v-for="item in hiddenTypeList" :key="item.value" :label="item.label"
                                   :value="item.value"></el-option>
                    </el-select>

                </el-form-item>
            </el-col>
            <el-col :span="12">
                <el-form-item label="所属项目" prop="projectId"
                              :rules="[
                 ]">
                    <el-select v-model="inputForm.projectId" filterable placeholder="请选择" @input="selectChangeParent">
                        <el-option
                                v-for="(item, index) in projectInfo"
                                :key="item.id"
                                :label="item.name"
                                :value="item.id">
                        </el-option>
                    </el-select>
                </el-form-item>
            </el-col>

            <el-col :span="24">
                <el-form-item label="隐患地点" prop="address"
                              :rules="[
                 ]">
                    <el-input v-model="inputForm.address" placeholder="请填写隐患地点" maxlength="64"
                              show-word-limit></el-input>
                </el-form-item>
            </el-col>

            <el-col :span="24">
                <el-form-item label="隐患详情" prop="hiddenDetail"
                              :rules="[
                 ]">
                    <el-input :rows="6" type="textarea" v-model="inputForm.hiddenDetail" placeholder="请填写隐患详情"
                              maxlength="200" show-word-limit></el-input>
                </el-form-item>
            </el-col>
            <el-col :span="12">
                <el-form-item label="隐患图片" prop="hiddenUrl"
                              :rules="[
                 ]">
                    <fs-upload-imgs v-model="inputForm.hiddenUrl"></fs-upload-imgs>
                </el-form-item>
            </el-col>
        </el-row>
    </el-form>
</div>
<script>
    var formContainer = new Vue({
        el: '#app',
        mixins: [sharpMixin],
        data() {
            return {
                loading: false,
                inputForm: {
                    id: '${hiddenInfo.id}',
                    hiddenName: '',
                    principal: '',
                    supervision: '',
                    hiddenUrl: '',
                    hiddenDetail: '',
                    address: '',
                    projectId: '',
                    hiddenMeasurId: '',
                    projectType: '',
                    projectName:'',
                    hiddenMeasurName: ''
                },
                hiddenType: '',
                hiddenTypeList: [],
                projectInfo: {
                    id: '',
                    name: ''
                },
                hiddenMeasure:{
                    id: '',
                    measureName: '',
                },
                hiddenMeasureList:[]
            }
        },
        created() {
            let that = this
            this.clearForm(function () {
                if (that.inputForm.id != '') {
                    that.loadData()
                }
            });
            this.hiddenTypeList = this.getDictList("hidden_type")
            this.initHiddenMeasure()
        },
        methods: {
            loadData() {
                this.loading = true
                this.get('${ctx}/safety/hiddenInfo/info', {id: this.inputForm.id}).then((res) => {
                    if (res.data) {
                        this.inputForm = res.data
                        this.hiddenType = this.inputForm.projectType
                    }
                    this.initBasicData()
                    this.selectProjectType()
                    this.loading = false
                })
            },
            selectChangeParent(index){
                let listData=[];
                listData = this.projectInfo;
                for (let i = 0; i <listData.length ; i++) {
                    if ( listData[i].id==this.inputForm.projectId){
                        this.inputForm.projectName=listData[i].name
                    }

                }
            },
            initBasicData() {
                let initData = {}
                Object.assign(this.inputForm, initData);
            },
            initHiddenMeasure(){
                this.get('${ctx}/safety/hiddenMeasure/hiddenList').then((res) => {
                    if (res.data) {
                        this.hiddenMeasureList = res.data
                    }
                })
            },
            initProjectData(type) {
                this.get('${ctx}/safety/hiddenInfo/findProjectInfo?type=' + type).then((res) => {
                    if (res.data) {
                        this.projectInfo = res.data
                    }
                })
            },
            initBuildData(type) {
                this.get('${ctx}/safety/hiddenInfo/findProjectInfo?type=' + type).then((res) => {
                    if (res.data) {
                        this.projectInfo = res.data
                    }
                })
            },
            initRoomData(type) {
                this.get('${ctx}/safety/hiddenInfo/findProjectInfo?type=' + type).then((res) => {
                    if (res.data) {
                        this.projectInfo = res.data
                    }
                })
            },
            selectProjectType() {
                this.inputForm.projectType = this.hiddenType
                let type = this.inputForm.projectType
                if (this.hiddenType == 1) {
                    //hiddenType为1时查询在建项目信息
                    this.projectInfo = ''
                    this.initProjectData(type)
                } else if (this.hiddenType == 2) {
                    //hiddenType为2时查询建筑物信息
                    this.projectInfo = ''
                    this.initBuildData(type)
                } else {
                    //hiddenType为3时查询房屋信息
                    this.projectInfo = ''
                    this.initRoomData(type)
                }

            },
            clearForm(call) {
                let that = this
                setTimeout(function () {
                    that.$refs['inputForm'].resetFields();
                    if (call) {
                        call();
                    }
                }, 300)
            },
            // 提交
            doSubmit(call) {
                this.$refs['inputForm'].validate((valid) => {
                    if (valid) {

                        this.post('${ctx}/safety/hiddenInfo/save', this.inputForm).then((res) => {
                            if (res.success) {
                                this.$message.success(res.msg)
                                call()
                            } else {
                                this.$message.error(res.msg)
                            }
                        })
                    } else {
                        return false;
                    }
                })
            }
        }
    })
</script>
<% } %>

<think>好的,我需要帮助用户理解el-select-v2el-select的区别及用法。首先,我要回顾Element UIElement Plus的文档,确认两者的不同点。用户提到了引用12,其中引用1是关于el-select-v2的焦点状态问题,引用2是el-select的placeholder不显示。这可能涉及到组件版本功能差异。 首先,el-selectElement UI中的传统选择器组件,而el-select-v2是Element Plus引入的虚拟滚动选择器,用于处理大数据量。需要明确两者的核心区别,比如虚拟滚动、性能优化、API差异等。 接下来,我应该比较它们的适用场景:el-select适合常规数据量,而el-select-v2适合大数据量,比如成千上万条选项。然后,可能需要提到API的不同,比如el-select-v2使用value-key而不是直接使用value,以及事件插槽的差异。 另外,用户提到的引用1中的焦点问题,可能需要在注意事项里说明el-select-v2的行为差异,比如选中后保持焦点,可能需要手动处理blur事件。引用2中的placeholder问题,可能涉及到el-select的版本或使用方式,比如是否绑定了正确的v-model,或者是否有默认值导致placeholder不显示。 然后,我需要组织这些信息,结构清晰地区分差异点、用法示例注意事项。最后,根据用户提供的引用链接,生成相关问题,帮助用户进一步探索。</think>### el-select-v2 与 el-select 差异及使用方法解析 #### 一、核心差异对比 1. **虚拟滚动支持** - `el-select-v2`:专为大数据量设计,通过虚拟滚动技术优化性能(如渲染万级选项时内存占用更低)[^1]。 - `el-select`:适用于常规数据量(百级以下),无虚拟滚动支持。 2. **API 设计差异** - **绑定值方式** ```html <!-- el-select --> <el-select v-model="value" label-key="name"> <el-option v-for="item in list" :key="item.id" :label="item.name" :value="item.id" /> </el-select> <!-- el-select-v2 --> <el-select-v2 v-model="value" :options="options" value-key="id" label-key="name" /> ``` - **事件差异**:`el-select-v2` 需要手动处理 `blur` 事件以移除焦点(如通过 `@blur="handleBlur"` 触发状态变更)。 3. **功能特性** - `el-select` 支持插槽自定义选项内容,而 `el-select-v2` 通过 `render-label` 属性实现类似功能。 --- #### 二、使用场景建议 | 组件 | 适用场景 | 性能表现 | |---------------|-----------------------------------|-------------------| | `el-select` | 选项数量 ≤ 500 | 常规渲染,响应快 | | `el-select-v2`| 选项数量 ≥ 1000(如省市区选择) | 虚拟滚动,内存低 | --- #### 三、常见问题解决 1. **`el-select-v2` 焦点残留问题** 选中后需手动触发失焦: ```javascript const handleBlur = () => { /* 更新组件状态 */ }; ``` 2. **`el-select` 的 placeholder 不显示** 检查 `v-model` 是否初始化为 `null` 或 `undefined`,而非空字符串[^2]。 --- #### 四、代码示例对比 ```html <!-- el-select 基础用法 --> <el-select v-model="selected" placeholder="请选择"> <el-option label="选项1" value="1" /> <el-option label="选项2" value="2" /> </el-select> <!-- el-select-v2 虚拟滚动 --> <el-select-v2 v-model="selected" :options="largeList" value-key="id" label-key="text" style="width: 240px" /> ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值