鍍金池/ 問答/HTML/ vue項目用element-ui的select獲取聯(lián)動數(shù)據(jù)怎么寫?

vue項目用element-ui的select獲取聯(lián)動數(shù)據(jù)怎么寫?

業(yè)務場景是這樣,選擇付款項關(guān)聯(lián)材料:
圖片描述

接口返回的數(shù)據(jù)是這樣的,怎么選擇items中的name后,把此條數(shù)據(jù)的item放在材料選項里:
圖片描述

這是彈框代碼:

<!-- 添加/編輯預算內(nèi)付款 -->
        <el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible">
            <el-form class="small-space" :model="forms" label-position="left" label-width="70px" style='width: 400px; margin-left:50px;'>
                <el-form-item label="預算類別" label-width="80px">
                    <el-input v-model="catein" :disabled="true"></el-input>
                </el-form-item>
                <el-form-item label="付款項" label-width="80px">
                    <el-select v-model="forms.payed_terms" placeholder="請選擇付款項類別" style="width: 100%;">
                        <el-option v-for="item in typesContractData" :key="item.id" :label="item.name" :value="item.id"></el-option>
                    </el-select>
                </el-form-item>
                <el-form-item label="材料" label-width="80px">
                    <el-select placeholder="請選擇材料" style="width: 100%;">
                        <el-option v-for="item in marterList" :key="item.id" :label="item.material_name" :value="item.id"></el-option>
                    </el-select>
                </el-form-item>
                <el-form-item label="付款金額" label-width="80px">
                    <el-input v-model.number="forms.money" placeholder="請輸入付款金額"></el-input>
                </el-form-item>
            </el-form>
            <div slot="footer" class="dialog-footer">
                <el-button @click="dialogFormVisible = false">取 消</el-button>
                <el-button :loading="submitLoading" v-if="dialogStatus === 'create'" type="primary" @click="addList">確 定</el-button>
                <el-button :loading="submitLoading" v-else type="primary" @click="update">確 定</el-button>
            </div>
        </el-dialog>

這是獲取接口函數(shù),typesContractData是付款項的數(shù)組,marterList是材料的數(shù)組:

// 獲取預算列表
            getBudget() {
                let params = { "access-token": this.access_token }
                budgetList(params).then(res => {
                    let data = res.data.items
                    for(var i = 0; i < data.length - 1; i++) {
                        this.typesContractData.push(data[i])
                        let datas = this.typesContractData[i].item
                        for(var g = 0; g < datas.length; g++) {
                            this.marterList.push(datas[g])
                        }
                    }
                    console.log(this.typesContractData)
                    console.log(this.marterList)
                }).catch(err => {
                    console.log(err)
                })
            }

想過用watch來監(jiān)聽付款項數(shù)據(jù)的改變來改變材料的數(shù)據(jù),結(jié)果好像不行,因為是在一個接口數(shù)組里面。
感覺不難,但就是寫不出來,還是對數(shù)據(jù)處理理解的不夠深,求解決,蟹蟹!


還有[Vue warn]: Missing required prop: "value"這個錯誤是什么意思?


<el-form-item label="預算類別" label-width="80px">
    <el-select v-model="forms.payed_terms" @change="changeMethods(name)" placeholder="請選擇預算類別" style="width: 100%;">
        <el-option v-for="item in typesContractData" :key="item.id" :label="item.name" :value="item.id"></el-option>
    </el-select>
</el-form-item>
<el-form-item label="材料" label-width="80px">
    <el-select placeholder="請選擇材料" style="width: 100%;">
        <el-option v-for="item in marterList" :key="item.id" :label="item.material_name" :value="item.id"></el-option>
    </el-select>
</el-form-item>
changeMethods(name) {
    var marterList = []
    items.map(e => {
        if(e.name = name) {
            marterList = e.item
        }
    })
},
回答
編輯回答
薄荷綠

@change事件

2017年2月7日 15:28
編輯回答
尋仙

下面的材料 隨上面的select @change事件來改變

下面這個材料顯示 就是最大數(shù)據(jù)

changeMethods (name) {
    var obj =[]   ///這個就是材料渲染的數(shù)據(jù)
     items.map(e=>{
        if(e.name = name){
         obj  =  e.item 
        }
    })
 }
 
 // 然后你的材料select渲染這個obj  就可以

不明白call我

2017年4月12日 00:01
編輯回答
尐懶貓

你可以把全部數(shù)據(jù)獲取到之后,存入一個變量。先遍歷填充付款項的下拉框,再通過element的選擇器change觸發(fā)事件通過當前選項的下標到之前暫存的數(shù)據(jù)中找到相應的下級數(shù)據(jù)來填充材料選擇器,如此類推填充下級選擇器。這是比較笨的方法了。。。。

2018年4月1日 00:48
編輯回答
涼汐

把這里的 <el-option v-for="item in typesContractData" :key="item.id" :label="item.name" :value="item.id"></el-option>
修改成
<el-option v-for="item in typesContractData" :key="item.id" :label="item.name" :value="item" value-key="item.id" @change="handleChange"></el-option>
圖片描述

handleChange:function(){

console.log(this.value);
 // 這里value 就是整個 對象了
this.marterList = this.value.item.slice(0)

}

沒實際運行,上面是大概思路,可以參考一下

2018年5月6日 09:14