Vue.js 2.0中select级联下拉框实例


Posted in Javascript onMarch 06, 2017

   在网上搜索了Vuejs2.0 动态级联select许久未果,决定自己总结一下自己的经验,有关select在Vue.js 2.0版本中的应用。首先我先说一下的我使用的技术,我参考了网上成熟的经验,选择以Vue.js 2.0+Vue-router+Vuex的全家桶。

    select首先要区分单选和多选,v-model在select单选和多选上有区别。

    select单选实例:

<select v-model="fruit">
 <option selected value="apple">苹果</option>
 <option value="banana">香蕉</option>
 <option value="watermelon">西瓜</option>
</select>
<span>Selected:{{ fruit }}</span>

    当被选中的option有value属性时,vm.selected 为对应option的value值;否则为对应options的text值。

    select多选实例:

<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,被选中的值会被放入一个数组中。当然在我们实际开发中绝大部分都是动态select的情况,所以接下来将分析动态select的实例。

动态select

我们可以通过v-for、v-bind指令动态生成option,实例如下:

<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>

   生成的代码结构如下:

<select>
 <option value="apple">苹果</option>
 <option value="banana">香蕉</option>
 <option value="watermelon">西瓜</option>
</select>

到这儿基础知识总结完了,开始来干货了。我在写级联select的时候遇到2个问题,一个问题是如何解决第一个select选中之后查询关联select的数据;一个问题就是我修改数据的时候如何默认选中级联的select数据,显示在页面。这2个问题主要还是第二个问题困扰我一点。

第一个问题的解决方案是对选中第一个select中的数据做监听,数据又变化就发起获取第二个关联select的请求。实例如下所示:

<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' //获取城市对应辖区的下拉列表
 },
 methods: {
 getSelectLists: function() {},
 getSecondSelectLists: function(){}
 }
 }
 
</script>

第二个问题的解决方案是首先我在实例已经创建完成之后被调用,先获取城市下拉列表成功之后再去获取编辑详情的数据,然后延时绑定关联的辖区列表的值,其实是为了获取在生命周期内监听城市之改变之后为先获取辖区列表数据加载,这样才能绑定显示辖区的下拉列表。

<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'  //监听城市值变化,获取城市对应辖区的下拉列表
 },
 methods: {
 getSelectLists: function() {
 let vm = this;
 if(vm.$route.name == 'modif') { //判断编辑页面获取编辑详情数据
  vm.getDetails(vm.$route.params.id); 
 }
 },
 getSecondSelectLists: function(){},
 getDetails:function(){
 setTimeout(function() {
  vm.resArea = data.id; //延时绑定辖区的下拉选项,为了辖区下拉数据先加载
  }, 300);
 }
 }
 }
</script>

总结:

     在Vue.js 2.0的生命周期中,select的级联下拉数据绑定,需要先加载好数据,然后才能绑定值。不然无法成功绑定级联下拉的值。

参考资料:

vue.js官网

以上所述是小编给大家介绍的Vue.js 2.0中select级联下拉框实例,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
ImageFlow可鼠标控制图片滚动
Jan 30 Javascript
Javascript和Ajax中文乱码吐血版解决方案
Dec 21 Javascript
Javascript学习笔记6 prototype的提出
Jan 11 Javascript
js/jQuery对象互转(快速操作dom元素)
Feb 04 Javascript
JQuery获取各种宽度、高度(format函数)实例
Mar 04 Javascript
js的回调函数详解
Jan 05 Javascript
JavaScript原型对象原理与应用分析
Dec 27 Javascript
基于javascript的拖拽类封装详解
Apr 19 Javascript
微信小程序Echarts覆盖正常组件问题解决
Jul 13 Javascript
layui富文本编辑器前端无法取值的解决方法
Sep 18 Javascript
Vue.directive 实现元素scroll逻辑复用
Nov 29 Javascript
浅谈Vuex的this.$store.commit和在Vue项目中引用公共方法
Jul 24 Javascript
jquery获取select,option所有的value和text的实例
Mar 06 #Javascript
Bootstrap按钮组简单实现代码
Mar 06 #Javascript
Bootstrap组合上、下拉框简单实现代码
Mar 06 #Javascript
Javascript中引用类型传递的知识点小结
Mar 06 #Javascript
vuejs开发组件分享之H5图片上传、压缩及拍照旋转的问题处理
Mar 06 #Javascript
js正则表达式验证表单【完整版】
Mar 06 #Javascript
Vue.js 2.0 移动端拍照压缩图片上传预览功能
Mar 06 #Javascript
You might like
destoon实现资讯信息前面调用它所属分类的方法
2014/07/15 PHP
微信公众平台之快递查询功能用法实例
2015/04/14 PHP
php实现用已经过去多长时间的方式显示时间
2015/06/05 PHP
php实现购物车功能(以大苹果购物网为例)
2017/03/09 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
2017/08/30 PHP
php实现统计二进制中1的个数算法示例
2018/01/23 PHP
Laravel框架Request、Response及Session操作示例
2019/05/06 PHP
在IE中调用javascript打开Excel的代码(downmoon原作)
2007/04/02 Javascript
IE6中使用position导致页面变形的解决方案(js代码)
2011/01/09 Javascript
javascript表单验证 - Parsley.js使用和配置
2013/01/25 Javascript
node在两个div之间移动,用ztree实现
2013/03/06 Javascript
浅析jQuery中常用的元素查找方法总结
2013/07/04 Javascript
如何解决Jquery库及其他库之间的$命名冲突
2013/09/15 Javascript
jquery $(this).attr $(this).val方法使用介绍
2013/10/08 Javascript
jquery 操作iframe的几种方法总结
2013/12/13 Javascript
js和css写一个可以自动隐藏的悬浮框
2014/03/05 Javascript
jquery禁用右键单击功能屏蔽F5刷新
2014/03/17 Javascript
Jquery的基本对象转换和文档加载用法实例
2015/02/25 Javascript
JS实现可展开折叠层的鼠标拖曳效果
2015/10/09 Javascript
javascript基础知识
2016/06/07 Javascript
轻松搞定js表单验证
2016/10/13 Javascript
jquery mobile移动端幻灯片滑动切换效果
2020/04/15 Javascript
Agularjs妙用双向数据绑定实现手风琴效果
2017/05/26 Javascript
Vue.js实现价格计算器功能
2020/03/30 Javascript
vue.js+ElementUI实现进度条提示密码强度效果
2020/01/18 Javascript
[35:26]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第三局
2016/02/26 DOTA
[43:43]完美世界DOTA2联赛PWL S2 FTD.C vs Rebirth 第一场 11.22
2020/11/24 DOTA
pandas数据分组和聚合操作方法
2018/04/11 Python
解决tensorflow/keras时出现数组维度不匹配问题
2020/06/29 Python
使用CSS3实现SVG路径描边动画效果入门教程
2019/10/21 HTML / CSS
西班牙创意礼品和小工具网上商店:Curiosite
2016/07/26 全球购物
英国山地公路自行车商店:Tweeks Cycles
2018/03/16 全球购物
音乐学院硕士生的自我评价分享
2013/11/01 职场文书
简历中的自我评价怎么写呢?
2019/04/30 职场文书
Python实战之用tkinter库做一个鼠标模拟点击器
2021/04/27 Python
在 HTML 页面中使用 React的场景分析
2022/01/18 Javascript