Vue.js 2.0中select級聯(lián)下拉框?qū)嵗?/h1>
更新時間:2017年03月06日 11:39:36 作者:w-rain
在網(wǎng)上搜索了Vuejs2.0 動態(tài)級聯(lián)select許久未果,決定自己總結(jié)一下自己的經(jīng)驗(yàn),有關(guān)select在Vue.js 2.0版本中的應(yīng)用,需要的朋友可以參考下
在網(wǎng)上搜索了Vuejs2.0 動態(tài)級聯(lián)select許久未果,決定自己總結(jié)一下自己的經(jīng)驗(yàn),有關(guān)select在Vue.js 2.0版本中的應(yīng)用。首先我先說一下的我使用的技術(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">蘋果</option>
<option value="banana">香蕉</option>
<option value="watermelon">西瓜</option>
</select>
<span>Selected:{{ fruit }}</span>
當(dāng)被選中的option有value屬性時,vm.selected 為對應(yīng)option的value值;否則為對應(yīng)options的text值。
select多選實(shí)例:
<select v-model="fruit" multiple>
<option selected value="apple">蘋果</option>
<option value="banana">香蕉</option>
<option value="watermelon">西瓜</option>
</select>
<span>Selected:{{ fruit | json }}</span>
對于多選的select,被選中的值會被放入一個數(shù)組中。當(dāng)然在我們實(shí)際開發(fā)中絕大部分都是動態(tài)select的情況,所以接下來將分析動態(tài)select的實(shí)例。
動態(tài)select
我們可以通過v-for、v-bind指令動態(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: '蘋果', value: 'apple' },
{ text: '香蕉', value: 'banana' },
{ text: '西瓜', value: 'watermelon' }
]
}
});
</script>
生成的代碼結(jié)構(gòu)如下:
<select>
<option value="apple">蘋果</option>
<option value="banana">香蕉</option>
<option value="watermelon">西瓜</option>
</select>
到這兒基礎(chǔ)知識總結(jié)完了,開始來干貨了。我在寫級聯(lián)select的時候遇到2個問題,一個問題是如何解決第一個select選中之后查詢關(guān)聯(lián)select的數(shù)據(jù);一個問題就是我修改數(shù)據(jù)的時候如何默認(rèn)選中級聯(lián)的select數(shù)據(jù),顯示在頁面。這2個問題主要還是第二個問題困擾我一點(diǎn)。
第一個問題的解決方案是對選中第一個select中的數(shù)據(jù)做監(jiān)聽,數(shù)據(jù)又變化就發(fā)起獲取第二個關(guān)聯(lián)select的請求。實(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' //獲取城市對應(yīng)轄區(qū)的下拉列表
},
methods: {
getSelectLists: function() {},
getSecondSelectLists: function(){}
}
}
</script>
第二個問題的解決方案是首先我在實(shí)例已經(jīng)創(chuàng)建完成之后被調(diào)用,先獲取城市下拉列表成功之后再去獲取編輯詳情的數(shù)據(jù),然后延時綁定關(guān)聯(lián)的轄區(qū)列表的值,其實(shí)是為了獲取在生命周期內(nèi)監(jiān)聽城市之改變之后為先獲取轄區(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)聽城市值變化,獲取城市對應(yīng)轄區(qū)的下拉列表
},
methods: {
getSelectLists: function() {
let vm = this;
if(vm.$route.name == 'modif') { //判斷編輯頁面獲取編輯詳情數(shù)據(jù)
vm.getDetails(vm.$route.params.id);
}
},
getSecondSelectLists: function(){},
getDetails:function(){
setTimeout(function() {
vm.resArea = data.id; //延時綁定轄區(qū)的下拉選項(xiàng),為了轄區(qū)下拉數(shù)據(jù)先加載
}, 300);
}
}
}
</script>
總結(jié):
在Vue.js 2.0的生命周期中,select的級聯(lián)下拉數(shù)據(jù)綁定,需要先加載好數(shù)據(jù),然后才能綁定值。不然無法成功綁定級聯(lián)下拉的值。
參考資料:
以上所述是小編給大家介紹的Vue.js 2.0中select級聯(lián)下拉框?qū)嵗M麑Υ蠹矣兴鶐椭?,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
-
vue?使用mescroll.js框架實(shí)現(xiàn)下拉加載和上拉刷新功能
這篇文章主要介紹了vue?使用mescroll.js框架?實(shí)現(xiàn)下拉加載和上拉刷新功能,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下 2022-07-07
-
Vue實(shí)現(xiàn)點(diǎn)擊按鈕復(fù)制文本內(nèi)容的例子
今天小編就為大家分享一篇Vue實(shí)現(xiàn)點(diǎn)擊按鈕復(fù)制文本內(nèi)容的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧 2019-11-11
-
Vue中引入使用patch-package為依賴打補(bǔ)丁問題
這篇文章主要介紹了Vue中引入使用patch-package為依賴打補(bǔ)丁問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
2024-03-03
-
vue.js中引入vuex儲存接口數(shù)據(jù)及調(diào)用的詳細(xì)流程
這篇文章主要給大家介紹了關(guān)于在vue.js中引入vuex儲存接口數(shù)據(jù)及調(diào)用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。 2017-12-12
-
electron-vue利用webpack打包實(shí)現(xiàn)多頁面的入口文件問題
項(xiàng)目需要在electron的項(xiàng)目中新打開一個窗口,利用webpack作為靜態(tài)資源打包器,發(fā)現(xiàn)在webpack中可以設(shè)置多頁面的入口,今天來講一下我在electron中利用webpack建立多頁面入口的踩坑經(jīng)驗(yàn),需要的朋友可以參考下 2019-05-05
最新評論
在網(wǎng)上搜索了Vuejs2.0 動態(tài)級聯(lián)select許久未果,決定自己總結(jié)一下自己的經(jīng)驗(yàn),有關(guān)select在Vue.js 2.0版本中的應(yīng)用。首先我先說一下的我使用的技術(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">蘋果</option>
<option value="banana">香蕉</option>
<option value="watermelon">西瓜</option>
</select>
<span>Selected:{{ fruit }}</span>
當(dāng)被選中的option有value屬性時,vm.selected 為對應(yīng)option的value值;否則為對應(yīng)options的text值。
select多選實(shí)例:
<select v-model="fruit" multiple>
<option selected value="apple">蘋果</option>
<option value="banana">香蕉</option>
<option value="watermelon">西瓜</option>
</select>
<span>Selected:{{ fruit | json }}</span>
對于多選的select,被選中的值會被放入一個數(shù)組中。當(dāng)然在我們實(shí)際開發(fā)中絕大部分都是動態(tài)select的情況,所以接下來將分析動態(tài)select的實(shí)例。
動態(tài)select
我們可以通過v-for、v-bind指令動態(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: '蘋果', value: 'apple' },
{ text: '香蕉', value: 'banana' },
{ text: '西瓜', value: 'watermelon' }
]
}
});
</script>
生成的代碼結(jié)構(gòu)如下:
<select> <option value="apple">蘋果</option> <option value="banana">香蕉</option> <option value="watermelon">西瓜</option> </select>
到這兒基礎(chǔ)知識總結(jié)完了,開始來干貨了。我在寫級聯(lián)select的時候遇到2個問題,一個問題是如何解決第一個select選中之后查詢關(guān)聯(lián)select的數(shù)據(jù);一個問題就是我修改數(shù)據(jù)的時候如何默認(rèn)選中級聯(lián)的select數(shù)據(jù),顯示在頁面。這2個問題主要還是第二個問題困擾我一點(diǎn)。
第一個問題的解決方案是對選中第一個select中的數(shù)據(jù)做監(jiān)聽,數(shù)據(jù)又變化就發(fā)起獲取第二個關(guān)聯(lián)select的請求。實(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' //獲取城市對應(yīng)轄區(qū)的下拉列表
},
methods: {
getSelectLists: function() {},
getSecondSelectLists: function(){}
}
}
</script>
第二個問題的解決方案是首先我在實(shí)例已經(jīng)創(chuàng)建完成之后被調(diào)用,先獲取城市下拉列表成功之后再去獲取編輯詳情的數(shù)據(jù),然后延時綁定關(guān)聯(lián)的轄區(qū)列表的值,其實(shí)是為了獲取在生命周期內(nèi)監(jiān)聽城市之改變之后為先獲取轄區(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)聽城市值變化,獲取城市對應(yīng)轄區(qū)的下拉列表
},
methods: {
getSelectLists: function() {
let vm = this;
if(vm.$route.name == 'modif') { //判斷編輯頁面獲取編輯詳情數(shù)據(jù)
vm.getDetails(vm.$route.params.id);
}
},
getSecondSelectLists: function(){},
getDetails:function(){
setTimeout(function() {
vm.resArea = data.id; //延時綁定轄區(qū)的下拉選項(xiàng),為了轄區(qū)下拉數(shù)據(jù)先加載
}, 300);
}
}
}
</script>
總結(jié):
在Vue.js 2.0的生命周期中,select的級聯(lián)下拉數(shù)據(jù)綁定,需要先加載好數(shù)據(jù),然后才能綁定值。不然無法成功綁定級聯(lián)下拉的值。
參考資料:
以上所述是小編給大家介紹的Vue.js 2.0中select級聯(lián)下拉框?qū)嵗M麑Υ蠹矣兴鶐椭?,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
vue?使用mescroll.js框架實(shí)現(xiàn)下拉加載和上拉刷新功能
這篇文章主要介紹了vue?使用mescroll.js框架?實(shí)現(xiàn)下拉加載和上拉刷新功能,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-07-07
Vue實(shí)現(xiàn)點(diǎn)擊按鈕復(fù)制文本內(nèi)容的例子
今天小編就為大家分享一篇Vue實(shí)現(xiàn)點(diǎn)擊按鈕復(fù)制文本內(nèi)容的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11
Vue中引入使用patch-package為依賴打補(bǔ)丁問題
這篇文章主要介紹了Vue中引入使用patch-package為依賴打補(bǔ)丁問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03
vue.js中引入vuex儲存接口數(shù)據(jù)及調(diào)用的詳細(xì)流程
這篇文章主要給大家介紹了關(guān)于在vue.js中引入vuex儲存接口數(shù)據(jù)及調(diào)用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-12-12
electron-vue利用webpack打包實(shí)現(xiàn)多頁面的入口文件問題
項(xiàng)目需要在electron的項(xiàng)目中新打開一個窗口,利用webpack作為靜態(tài)資源打包器,發(fā)現(xiàn)在webpack中可以設(shè)置多頁面的入口,今天來講一下我在electron中利用webpack建立多頁面入口的踩坑經(jīng)驗(yàn),需要的朋友可以參考下2019-05-05

