Vue.js 2.0中select級(jí)聯(lián)下拉框?qū)嵗?/h1>
更新時(shí)間:2017年03月06日 11:39:36 作者:w-rain
在網(wǎng)上搜索了Vuejs2.0 動(dòng)態(tài)級(jí)聯(lián)select許久未果,決定自己總結(jié)一下自己的經(jīng)驗(yàn),有關(guān)select在Vue.js 2.0版本中的應(yīng)用,需要的朋友可以參考下
在網(wǎng)上搜索了Vuejs2.0 動(dòng)態(tài)級(jí)聯(lián)select許久未果,決定自己總結(jié)一下自己的經(jīng)驗(yàn),有關(guān)select在Vue.js 2.0版本中的應(yīng)用。首先我先說(shuō)一下的我使用的技術(shù),我參考了網(wǎng)上成熟的經(jīng)驗(yàn),選擇以Vue.js 2.0+Vue-router+Vuex的全家桶。
select首先要區(qū)分單選和多選,v-model在select單選和多選上有區(qū)別。
select單選實(shí)例:
<select v-model="fruit">
<option selected value="apple">蘋(píng)果</option>
<option value="banana">香蕉</option>
<option value="watermelon">西瓜</option>
</select>
<span>Selected:{{ fruit }}</span>
當(dāng)被選中的option有value屬性時(shí),vm.selected 為對(duì)應(yīng)option的value值;否則為對(duì)應(yīng)options的text值。
select多選實(shí)例:
<select v-model="fruit" multiple>
<option selected value="apple">蘋(píng)果</option>
<option value="banana">香蕉</option>
<option value="watermelon">西瓜</option>
</select>
<span>Selected:{{ fruit | json }}</span>
對(duì)于多選的select,被選中的值會(huì)被放入一個(gè)數(shù)組中。當(dāng)然在我們實(shí)際開(kāi)發(fā)中絕大部分都是動(dòng)態(tài)select的情況,所以接下來(lái)將分析動(dòng)態(tài)select的實(shí)例。
動(dòng)態(tài)select
我們可以通過(guò)v-for、v-bind指令動(dòng)態(tài)生成option,實(shí)例如下:
<template>
<div id="app">
<select v-model="fruit" >
<option v-for="option in options" v-bind:value="option.value">
{{option.text}}
</option>
</select>
<span>Selected:{{ fruit | json }}</span>
</div>
</template>
<script>
new Vue({
el: '#app',
data: {
fruit: 'apple',
options: [
{ text: '蘋(píng)果', value: 'apple' },
{ text: '香蕉', value: 'banana' },
{ text: '西瓜', value: 'watermelon' }
]
}
});
</script>
生成的代碼結(jié)構(gòu)如下:
<select>
<option value="apple">蘋(píng)果</option>
<option value="banana">香蕉</option>
<option value="watermelon">西瓜</option>
</select>
到這兒基礎(chǔ)知識(shí)總結(jié)完了,開(kāi)始來(lái)干貨了。我在寫(xiě)級(jí)聯(lián)select的時(shí)候遇到2個(gè)問(wèn)題,一個(gè)問(wèn)題是如何解決第一個(gè)select選中之后查詢關(guān)聯(lián)select的數(shù)據(jù);一個(gè)問(wèn)題就是我修改數(shù)據(jù)的時(shí)候如何默認(rèn)選中級(jí)聯(lián)的select數(shù)據(jù),顯示在頁(yè)面。這2個(gè)問(wèn)題主要還是第二個(gè)問(wèn)題困擾我一點(diǎn)。
第一個(gè)問(wèn)題的解決方案是對(duì)選中第一個(gè)select中的數(shù)據(jù)做監(jiān)聽(tīng),數(shù)據(jù)又變化就發(fā)起獲取第二個(gè)關(guān)聯(lián)select的請(qǐng)求。實(shí)例如下所示:
<template>
<div class="box-select-first">
<select v-model.lazy="resCity">
<option v-for="sc in scLists" v-bind:value="sc.areacode">{{sc.cityname}}</option>
</select>
</div>
<div class="box-select-second">
<select v-model="resArea">
<option v-for="sa in saLists" v-bind:value="sa.id">{{sa.areaname}}</option>
</select>
</div>
</template>
<script>
export default {
data: function () {
return {
resCity: null,
resArea: null
}
},
created: function() {
let vm = this;
vm.getSelectLists(); //獲取城市下拉列表
},
watch: {
resCity: 'getSecondSelectLists' //獲取城市對(duì)應(yīng)轄區(qū)的下拉列表
},
methods: {
getSelectLists: function() {},
getSecondSelectLists: function(){}
}
}
</script>
第二個(gè)問(wèn)題的解決方案是首先我在實(shí)例已經(jīng)創(chuàng)建完成之后被調(diào)用,先獲取城市下拉列表成功之后再去獲取編輯詳情的數(shù)據(jù),然后延時(shí)綁定關(guān)聯(lián)的轄區(qū)列表的值,其實(shí)是為了獲取在生命周期內(nèi)監(jiān)聽(tīng)城市之改變之后為先獲取轄區(qū)列表數(shù)據(jù)加載,這樣才能綁定顯示轄區(qū)的下拉列表。
<template>
<div class="box-select-first">
<select v-model.lazy="resCity">
<option v-for="sc in scLists" v-bind:value="sc.areacode">{{sc.cityname}}</option>
</select>
</div>
<div class="box-select-second">
<select v-model="resArea">
<option v-for="sa in saLists" v-bind:value="sa.id">{{sa.areaname}}</option>
</select>
</div>
</template>
<script>
export default {
data: function () {
return {
resCity: null,
resArea: null
}
},
created: function() {
let vm = this;
vm.getSelectLists(); //實(shí)例已經(jīng)創(chuàng)建完成之后獲取城市下拉列表
},
watch: {
resCity: 'getSecondSelectLists' //監(jiān)聽(tīng)城市值變化,獲取城市對(duì)應(yīng)轄區(qū)的下拉列表
},
methods: {
getSelectLists: function() {
let vm = this;
if(vm.$route.name == 'modif') { //判斷編輯頁(yè)面獲取編輯詳情數(shù)據(jù)
vm.getDetails(vm.$route.params.id);
}
},
getSecondSelectLists: function(){},
getDetails:function(){
setTimeout(function() {
vm.resArea = data.id; //延時(shí)綁定轄區(qū)的下拉選項(xiàng),為了轄區(qū)下拉數(shù)據(jù)先加載
}, 300);
}
}
}
</script>
總結(jié):
在Vue.js 2.0的生命周期中,select的級(jí)聯(lián)下拉數(shù)據(jù)綁定,需要先加載好數(shù)據(jù),然后才能綁定值。不然無(wú)法成功綁定級(jí)聯(lián)下拉的值。
參考資料:
以上所述是小編給大家介紹的Vue.js 2.0中select級(jí)聯(lián)下拉框?qū)嵗M麑?duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
-
element-plus報(bào)錯(cuò)ResizeObserver?loop?limit?exceeded解決辦法
這篇文章主要給大家介紹了關(guān)于element-plus報(bào)錯(cuò)ResizeObserver?loop?limit?exceeded的解決辦法,文中通過(guò)代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下 2023-07-07
-
vue-cli3自動(dòng)消除console.log()的調(diào)試信息方式
這篇文章主要介紹了vue-cli3自動(dòng)消除console.log()的調(diào)試信息方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧 2020-10-10
-
vue使用elementUI組件實(shí)現(xiàn)分頁(yè)效果
分頁(yè)在展示數(shù)據(jù)列表的場(chǎng)景肯定是非常多的,一般的項(xiàng)目開(kāi)發(fā)中,數(shù)據(jù)量特別大,一般都是后端接口直接處理分頁(yè)返回,前端直接調(diào)用即可,本文給大家介紹了vue使用elementUI組件實(shí)現(xiàn)分頁(yè)效果,需要的朋友可以參考下 2023-12-12
-
Vue實(shí)現(xiàn)組件間通信的幾種方式(多種場(chǎng)景)
本文主要介紹了Vue實(shí)現(xiàn)組件間通信的幾種方式,不同的場(chǎng)景使用不同的方式,基本滿足所有開(kāi)發(fā)場(chǎng)景中的通信需求,感興趣的可以了解一下 2021-10-10
-
vue實(shí)現(xiàn)省市區(qū)的級(jí)聯(lián)選擇
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)省市區(qū)的級(jí)聯(lián)選擇,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下 2021-10-10
-
Vue3+TypeScript+printjs實(shí)現(xiàn)標(biāo)簽批量打印功能的完整過(guò)程
最近在做vue項(xiàng)目時(shí)使用到了print-js打印,這里給大家分享下,這篇文章主要給大家介紹了關(guān)于Vue3+TypeScript+printjs實(shí)現(xiàn)標(biāo)簽批量打印功能的完整過(guò)程,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下 2024-09-09
-
vue實(shí)現(xiàn)兩列水平時(shí)間軸的示例代碼
本文主要介紹了vue實(shí)現(xiàn)兩列水平時(shí)間軸的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下 2021-11-11
最新評(píng)論
在網(wǎng)上搜索了Vuejs2.0 動(dòng)態(tài)級(jí)聯(lián)select許久未果,決定自己總結(jié)一下自己的經(jīng)驗(yàn),有關(guān)select在Vue.js 2.0版本中的應(yīng)用。首先我先說(shuō)一下的我使用的技術(shù),我參考了網(wǎng)上成熟的經(jīng)驗(yàn),選擇以Vue.js 2.0+Vue-router+Vuex的全家桶。
select首先要區(qū)分單選和多選,v-model在select單選和多選上有區(qū)別。
select單選實(shí)例:
<select v-model="fruit"> <option selected value="apple">蘋(píng)果</option> <option value="banana">香蕉</option> <option value="watermelon">西瓜</option> </select> <span>Selected:{{ fruit }}</span>
當(dāng)被選中的option有value屬性時(shí),vm.selected 為對(duì)應(yīng)option的value值;否則為對(duì)應(yīng)options的text值。
select多選實(shí)例:
<select v-model="fruit" multiple> <option selected value="apple">蘋(píng)果</option> <option value="banana">香蕉</option> <option value="watermelon">西瓜</option> </select> <span>Selected:{{ fruit | json }}</span>
對(duì)于多選的select,被選中的值會(huì)被放入一個(gè)數(shù)組中。當(dāng)然在我們實(shí)際開(kāi)發(fā)中絕大部分都是動(dòng)態(tài)select的情況,所以接下來(lái)將分析動(dòng)態(tài)select的實(shí)例。
動(dòng)態(tài)select
我們可以通過(guò)v-for、v-bind指令動(dòng)態(tài)生成option,實(shí)例如下:
<template> <div id="app"> <select v-model="fruit" > <option v-for="option in options" v-bind:value="option.value"> {{option.text}} </option> </select> <span>Selected:{{ fruit | json }}</span> </div> </template> <script> new Vue({ el: '#app', data: { fruit: 'apple', options: [ { text: '蘋(píng)果', value: 'apple' }, { text: '香蕉', value: 'banana' }, { text: '西瓜', value: 'watermelon' } ] } }); </script>
生成的代碼結(jié)構(gòu)如下:
<select> <option value="apple">蘋(píng)果</option> <option value="banana">香蕉</option> <option value="watermelon">西瓜</option> </select>
到這兒基礎(chǔ)知識(shí)總結(jié)完了,開(kāi)始來(lái)干貨了。我在寫(xiě)級(jí)聯(lián)select的時(shí)候遇到2個(gè)問(wèn)題,一個(gè)問(wèn)題是如何解決第一個(gè)select選中之后查詢關(guān)聯(lián)select的數(shù)據(jù);一個(gè)問(wèn)題就是我修改數(shù)據(jù)的時(shí)候如何默認(rèn)選中級(jí)聯(lián)的select數(shù)據(jù),顯示在頁(yè)面。這2個(gè)問(wèn)題主要還是第二個(gè)問(wèn)題困擾我一點(diǎn)。
第一個(gè)問(wèn)題的解決方案是對(duì)選中第一個(gè)select中的數(shù)據(jù)做監(jiān)聽(tīng),數(shù)據(jù)又變化就發(fā)起獲取第二個(gè)關(guān)聯(lián)select的請(qǐng)求。實(shí)例如下所示:
<template> <div class="box-select-first"> <select v-model.lazy="resCity"> <option v-for="sc in scLists" v-bind:value="sc.areacode">{{sc.cityname}}</option> </select> </div> <div class="box-select-second"> <select v-model="resArea"> <option v-for="sa in saLists" v-bind:value="sa.id">{{sa.areaname}}</option> </select> </div> </template> <script> export default { data: function () { return { resCity: null, resArea: null } }, created: function() { let vm = this; vm.getSelectLists(); //獲取城市下拉列表 }, watch: { resCity: 'getSecondSelectLists' //獲取城市對(duì)應(yīng)轄區(qū)的下拉列表 }, methods: { getSelectLists: function() {}, getSecondSelectLists: function(){} } } </script>
第二個(gè)問(wèn)題的解決方案是首先我在實(shí)例已經(jīng)創(chuàng)建完成之后被調(diào)用,先獲取城市下拉列表成功之后再去獲取編輯詳情的數(shù)據(jù),然后延時(shí)綁定關(guān)聯(lián)的轄區(qū)列表的值,其實(shí)是為了獲取在生命周期內(nèi)監(jiān)聽(tīng)城市之改變之后為先獲取轄區(qū)列表數(shù)據(jù)加載,這樣才能綁定顯示轄區(qū)的下拉列表。
<template> <div class="box-select-first"> <select v-model.lazy="resCity"> <option v-for="sc in scLists" v-bind:value="sc.areacode">{{sc.cityname}}</option> </select> </div> <div class="box-select-second"> <select v-model="resArea"> <option v-for="sa in saLists" v-bind:value="sa.id">{{sa.areaname}}</option> </select> </div> </template> <script> export default { data: function () { return { resCity: null, resArea: null } }, created: function() { let vm = this; vm.getSelectLists(); //實(shí)例已經(jīng)創(chuàng)建完成之后獲取城市下拉列表 }, watch: { resCity: 'getSecondSelectLists' //監(jiān)聽(tīng)城市值變化,獲取城市對(duì)應(yīng)轄區(qū)的下拉列表 }, methods: { getSelectLists: function() { let vm = this; if(vm.$route.name == 'modif') { //判斷編輯頁(yè)面獲取編輯詳情數(shù)據(jù) vm.getDetails(vm.$route.params.id); } }, getSecondSelectLists: function(){}, getDetails:function(){ setTimeout(function() { vm.resArea = data.id; //延時(shí)綁定轄區(qū)的下拉選項(xiàng),為了轄區(qū)下拉數(shù)據(jù)先加載 }, 300); } } } </script>
總結(jié):
在Vue.js 2.0的生命周期中,select的級(jí)聯(lián)下拉數(shù)據(jù)綁定,需要先加載好數(shù)據(jù),然后才能綁定值。不然無(wú)法成功綁定級(jí)聯(lián)下拉的值。
參考資料:
以上所述是小編給大家介紹的Vue.js 2.0中select級(jí)聯(lián)下拉框?qū)嵗M麑?duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
element-plus報(bào)錯(cuò)ResizeObserver?loop?limit?exceeded解決辦法
這篇文章主要給大家介紹了關(guān)于element-plus報(bào)錯(cuò)ResizeObserver?loop?limit?exceeded的解決辦法,文中通過(guò)代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07vue-cli3自動(dòng)消除console.log()的調(diào)試信息方式
這篇文章主要介紹了vue-cli3自動(dòng)消除console.log()的調(diào)試信息方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-10-10vue使用elementUI組件實(shí)現(xiàn)分頁(yè)效果
分頁(yè)在展示數(shù)據(jù)列表的場(chǎng)景肯定是非常多的,一般的項(xiàng)目開(kāi)發(fā)中,數(shù)據(jù)量特別大,一般都是后端接口直接處理分頁(yè)返回,前端直接調(diào)用即可,本文給大家介紹了vue使用elementUI組件實(shí)現(xiàn)分頁(yè)效果,需要的朋友可以參考下2023-12-12Vue實(shí)現(xiàn)組件間通信的幾種方式(多種場(chǎng)景)
本文主要介紹了Vue實(shí)現(xiàn)組件間通信的幾種方式,不同的場(chǎng)景使用不同的方式,基本滿足所有開(kāi)發(fā)場(chǎng)景中的通信需求,感興趣的可以了解一下2021-10-10vue實(shí)現(xiàn)省市區(qū)的級(jí)聯(lián)選擇
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)省市區(qū)的級(jí)聯(lián)選擇,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10Vue3+TypeScript+printjs實(shí)現(xiàn)標(biāo)簽批量打印功能的完整過(guò)程
最近在做vue項(xiàng)目時(shí)使用到了print-js打印,這里給大家分享下,這篇文章主要給大家介紹了關(guān)于Vue3+TypeScript+printjs實(shí)現(xiàn)標(biāo)簽批量打印功能的完整過(guò)程,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-09-09vue實(shí)現(xiàn)兩列水平時(shí)間軸的示例代碼
本文主要介紹了vue實(shí)現(xiàn)兩列水平時(shí)間軸的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11