vue使用el-select下拉框匹配不到值的問題及解決
使用el-select下拉框匹配不到值的問題
問題描述
點擊編輯彈窗里從上面列表行數(shù)據(jù)里取到的乙方名稱變成了乙方id15,產(chǎn)生的原因是因為彈窗里的甲乙方列表是從接口請求來的,比如后期某個乙方公司關(guān)停了,這條數(shù)據(jù)就會被刪除,導(dǎo)致我們?nèi)〔坏竭@條數(shù)據(jù)


查看接口返回的列表,發(fā)現(xiàn)少了行數(shù)據(jù)中的乙方這條數(shù)據(jù)

解決思路
1.findIndex() 返回值判斷編輯當(dāng)前行數(shù)據(jù)取到的id和甲乙方列表里的id是否有一樣的; 如果有相同id的話,返回第一個符合條件的數(shù)組成員位置,都不符合條件,則返回 -1
2.如果返回數(shù)組成員位置 < 0 的話,從列表行數(shù)據(jù)取id和name值,創(chuàng)建一條被刪除這條數(shù)據(jù)的新對象;push進(jìn)數(shù)組的最后一條,這樣就不存在id取不到的情況了
解決方法
<el-form-item v-if="showPartner === '1'" label="甲方">
<el-select v-model="partnerForm.partner_id_a" filterable>
<el-option
v-for="(val, key) in partnerAList"
:key="key"
:label="val.partner_name"
:value="val.id"
/>
</el-select>
</el-form-item>
<el-form-item v-if="showPartner === '1'" label="乙方">
<el-select v-model="partnerForm.partner_id_b" filterable>
<el-option
v-for="(val, key) in partnerBList"
:key="key"
:label="val.partner_name"
:value="val.id"
/>
</el-select>
</el-form-item>setup(props, { emit }) {
const partnerAList = ref<any[]>([])
const partnerBList = ref<any[]>([])
const showPartner = ref<string>('0')
const dataMap = reactive({
partnerForm: {
phone: '',
partner_id_a: '0',
partner_id_b: '0',
username: '',
remark: '',
status: ''
}
})
const { onSubmit, close, formNode, subLoading } = useForm({ type: props.type, emit: emit, editApi: partnerApi['EDITPARTNERUSER'], addApi: partnerApi['ADDPARTNERUSER'], form: dataMap.partnerForm })
function getPartnerAList() {
partnerApi['GETPARTNERALIST']().then((res: any) => {
if (res.data.code === '20000') {
partnerAList.value = res.data.data
var tempObj = { id: '0', partner_name: '請選擇' }
partnerAList.value.unshift(tempObj)
const temp = res.data.data.findIndex((item:any) => {
return item.id === props.info['partner_id_a']
})
if (temp < 0) {
const presentObj = { id: props.info['partner_id_a'], partner_name: props.info['party_a_name'] }
partnerAList.value.push(presentObj)
}
}
})
}
function getPartnerBList() {
partnerApi['GETPARTNERBLIST']().then((res: any) => {
if (res.data.code === '20000') {
partnerBList.value = res.data.data
var tempObj = { id: '0', partner_name: '請選擇' }
partnerBList.value.unshift(tempObj)
const temp = res.data.data.findIndex((item:any) => {
return item.id === props.info['partner_id_b']
})
if (temp < 0) {
const presentObj = { id: props.info['partner_id_b'], partner_name: props.info['party_b_name'] }
partnerBList.value.push(presentObj)
}
}
})
}
onMounted(() => {
getPartnerAList()
getPartnerBList()
})
return {
formNode,
...toRefs(dataMap),
partnerFormRules,
onSubmit,
close,
subLoading,
partnerAList,
partnerBList,
showPartner,
onSubmitForm
}
}el-select下拉框,選擇后賦值成功,但是框上不顯示選中的值的解決
最近在做項目時發(fā)現(xiàn)el-select下拉框,選擇后賦值成功,但是框上不顯示選中的值。
后來查了下官方文檔之后發(fā)現(xiàn)原因:
vue 無法監(jiān)聽動態(tài)新增的屬性的變化,需要用 $set 來為這些屬性賦值。


如上圖所示,操作人下拉框初始沒有值,選擇了操作班組之后,根據(jù)所選的班組去獲取后臺數(shù)據(jù)填充操作人下拉框。
然后就發(fā)現(xiàn)了問題:選擇了操作人之后輸入框還是沒有值,但是綁定的@change事件currOperatorChange 打印出了選中的值。
解決方法:用 $set 來賦值
如下所示:
<el-row>
<el-col :span="12">
<el-form-item prop="deptId"
:label="$t('taskManage.lockTask.deptId')+':'">
<treeselect :placeholder="$t('taskManage.lockTask.selDeptId')"
:options="deptTree"
:normalizer="normalizer"
v-model="formData.deptId"
@select="selectDepart">
</treeselect>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="operateId"
:label="$t('taskManage.lockTask.table.operateName')+':'">
<el-select clearable
v-model="formData.operateId"
@change="currOperatorChange"
:placeholder="$t('taskManage.lockTask.selOperateName')">
<el-option v-for="item in operateOption"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>// 操作人選中項發(fā)生變化
currOperatorChange(val) {
console.log('操作人選中項發(fā)生變化', val)
if (val) {
let obj = {}
obj = this.operateOption.find(item => {
//這里的operateOption就是上面遍歷的數(shù)據(jù)源
return item.value === val //篩選出匹配數(shù)據(jù)
})
this.$set(this.formData, this.formData.operateId, val.value)
this.formData.operateName = obj.label
console.log('修改操作人名稱', obj.label, obj.value)
} else {
this.formData.operateName = ''
this.$set(this.formData, this.formData.operateId, '')
}
}總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue 實現(xiàn)復(fù)制功能,不需要任何結(jié)構(gòu)內(nèi)容直接復(fù)制方式
今天小編就為大家分享一篇Vue 實現(xiàn)復(fù)制功能,不需要任何結(jié)構(gòu)內(nèi)容直接復(fù)制方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11
vue實現(xiàn)echarts餅圖/柱狀圖點擊事件實例
echarts原生提供了相應(yīng)的API,只需要在配置好echarts之后綁定相應(yīng)的事件即可,下面這篇文章主要給大家介紹了關(guān)于vue實現(xiàn)echarts餅圖/柱狀圖點擊事件的相關(guān)資料,需要的朋友可以參考下2023-06-06
vue中el-table實現(xiàn)可拖拽移動列和動態(tài)排序字段
最近公司需要做個項目,需要拖拽表格和自定義表格字段,本文主要介紹了vue中el-table實現(xiàn)可拖拽移動列和動態(tài)排序字段,具有一定吃參考價值,感興趣的可以了解一下2023-12-12
vue?select組件綁定的值為數(shù)字類型遇到的問題
這篇文章主要介紹了vue?select組件綁定的值為數(shù)字類型遇到的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09

