1. 程式人生 > >elementUI select多級聯動

elementUI select多級聯動

需求:編輯時將值回顯,若某一級修改,之後的全部清空

實現:通過watch監聽值的改變,若改變,清空後一級的值,並呼叫方法請求下一級的option

問題:編輯賦值的時候也會觸發watch,導致只能講第一級的值回顯,之後的被清空

解決:在select上添加回調方法visible-change,可以得到當前改變的值是編輯回顯還是使用者手動修改,通過一個變數控制,從而控制是否需要清空

程式碼:

dom: 

<el-form-item label="樓盤地址">
                    <el-select v-model="form.province" placeholder="請選擇省份" size="mini" value-key="id" @visible-change="handleChangeFlag">
                        <el-option v-for="(item, index) in provinceOption" :key="index" :label="item.areaName" :value="item"></el-option>
                    </el-select>
                </el-form-item>
                <el-form-item>
                    <el-select v-model="form.city" placeholder="請選擇城市" size="mini" value-key="id" @visible-change="handleChangeFlag">
                        <el-option v-for="(item, index) in cityOption" :key="index" :label="item.areaName" :value="item"></el-option>
                    </el-select>
                </el-form-item>
                <el-form-item>
                    <el-select v-model="form.area" placeholder="請選擇區縣" size="mini" value-key="id" @visible-change="handleChangeFlag">
                        <el-option v-for="(item, index) in countyOption" :key="index" :label="item.areaName" :value="item"></el-option>
                    </el-select>
                </el-form-item>
                <el-form-item>
                    <el-input  v-model="form.projectaddress" placeholder="請輸入詳細資訊" size="mini"></el-input>
                </el-form-item>

js:

新增變數:

changeFlag: false
watch: {
            'form.province'(e) {
                if( this.changeFlag ){
                    this.form.city = {}
                }
                if( e && e.id ){
                    this.handleGetCityList({ parentId: e.id })
                }
            },
            'form.city'(e) {
                if( this.changeFlag ){
                    this.form.area = {}
                }
                if( e && e.id ){
                    this.handleGetAreaList({ parentId: e.id })z
                }
            },
            'form.area'(e) {
                if( this.changeFlag ){
                    this.form.projectaddress = ''
                }
            }
        },
handleChangeFlag(type) {// select回撥,判斷當前下拉框是否展示
  this.changeFlag = type;
}