vue使用el-select下拉框匹配不到值的問(wèn)題及解決
使用el-select下拉框匹配不到值的問(wèn)題
問(wèn)題描述
點(diǎn)擊編輯彈窗里從上面列表行數(shù)據(jù)里取到的乙方名稱(chēng)變成了乙方id15,產(chǎn)生的原因是因?yàn)閺棿袄锏募滓曳搅斜硎菑慕涌谡?qǐng)求來(lái)的,比如后期某個(gè)乙方公司關(guān)停了,這條數(shù)據(jù)就會(huì)被刪除,導(dǎo)致我們?nèi)〔坏竭@條數(shù)據(jù)


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

解決思路
1.findIndex() 返回值判斷編輯當(dāng)前行數(shù)據(jù)取到的id和甲乙方列表里的id是否有一樣的; 如果有相同id的話(huà),返回第一個(gè)符合條件的數(shù)組成員位置,都不符合條件,則返回 -1
2.如果返回?cái)?shù)組成員位置 < 0 的話(huà),從列表行數(shù)據(jù)取id和name值,創(chuàng)建一條被刪除這條數(shù)據(jù)的新對(duì)象;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: '請(qǐng)選擇' }
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: '請(qǐng)選擇' }
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下拉框,選擇后賦值成功,但是框上不顯示選中的值的解決
最近在做項(xiàng)目時(shí)發(fā)現(xiàn)el-select下拉框,選擇后賦值成功,但是框上不顯示選中的值。
后來(lái)查了下官方文檔之后發(fā)現(xiàn)原因:
vue 無(wú)法監(jiān)聽(tīng)動(dòng)態(tài)新增的屬性的變化,需要用 $set 來(lái)為這些屬性賦值。


如上圖所示,操作人下拉框初始沒(méi)有值,選擇了操作班組之后,根據(jù)所選的班組去獲取后臺(tái)數(shù)據(jù)填充操作人下拉框。
然后就發(fā)現(xiàn)了問(wèn)題:選擇了操作人之后輸入框還是沒(méi)有值,但是綁定的@change事件currOperatorChange 打印出了選中的值。
解決方法:用 $set 來(lái)賦值
如下所示:
<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>// 操作人選中項(xiàng)發(fā)生變化
currOperatorChange(val) {
console.log('操作人選中項(xiàng)發(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('修改操作人名稱(chēng)', obj.label, obj.value)
} else {
this.formData.operateName = ''
this.$set(this.formData, this.formData.operateId, '')
}
}總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue實(shí)現(xiàn)動(dòng)態(tài)進(jìn)度條效果
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)動(dòng)態(tài)進(jìn)度條效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
Vue 實(shí)現(xiàn)復(fù)制功能,不需要任何結(jié)構(gòu)內(nèi)容直接復(fù)制方式
今天小編就為大家分享一篇Vue 實(shí)現(xiàn)復(fù)制功能,不需要任何結(jié)構(gòu)內(nèi)容直接復(fù)制方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11
vue實(shí)現(xiàn)echarts餅圖/柱狀圖點(diǎn)擊事件實(shí)例
echarts原生提供了相應(yīng)的API,只需要在配置好echarts之后綁定相應(yīng)的事件即可,下面這篇文章主要給大家介紹了關(guān)于vue實(shí)現(xiàn)echarts餅圖/柱狀圖點(diǎn)擊事件的相關(guān)資料,需要的朋友可以參考下2023-06-06
vue實(shí)現(xiàn)背景圖片鋪滿(mǎn)整個(gè)屏幕(適配所有機(jī)型)
在網(wǎng)頁(yè)設(shè)計(jì)中,背景全屏是一種常見(jiàn)的視覺(jué)效果,通過(guò)正確的CSS樣式設(shè)置,可以實(shí)現(xiàn)背景全屏且內(nèi)容在固定一屏大小內(nèi)完全顯示,如果內(nèi)容超出一屏,則可以通過(guò)滾動(dòng)條查看剩余內(nèi)容,這種設(shè)計(jì)可以提升用戶(hù)的瀏覽體驗(yàn),使網(wǎng)頁(yè)看起來(lái)更加整潔和專(zhuān)業(yè)2024-10-10
vue中el-table實(shí)現(xiàn)可拖拽移動(dòng)列和動(dòng)態(tài)排序字段
最近公司需要做個(gè)項(xiàng)目,需要拖拽表格和自定義表格字段,本文主要介紹了vue中el-table實(shí)現(xiàn)可拖拽移動(dòng)列和動(dòng)態(tài)排序字段,具有一定吃參考價(jià)值,感興趣的可以了解一下2023-12-12
vue?select組件綁定的值為數(shù)字類(lèi)型遇到的問(wèn)題
這篇文章主要介紹了vue?select組件綁定的值為數(shù)字類(lèi)型遇到的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09

