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 相关文章推荐
html中使用javascript调用本地程序(exe、doc等)实现代码
Apr 26 Javascript
jquery重复提交请求的原因浅析
May 23 Javascript
javascript新闻跑马灯实例代码
Jul 29 Javascript
EasyUI 结合JS导出Excel文件的实现方法
Nov 10 Javascript
基于jQuery实现照片墙自动播放特效
Jan 12 Javascript
小程序实现抽奖动画
Apr 16 Javascript
微信小程序文字显示换行问题
Jul 28 Javascript
js前端如何写一个精确的倒计时代码
Oct 25 Javascript
js回调函数原理与用法案例分析
Mar 04 Javascript
vue界面发送表情的实现代码
Sep 11 Javascript
vue+Element-ui实现分页效果
Nov 15 Javascript
JS数组方法some、every和find的使用详情
Oct 05 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
深入了解php4(1)--回到未来
2006/10/09 PHP
一步一步学习PHP(5) 类和对象
2010/02/16 PHP
解析mysql left( right ) join使用on与where筛选的差异
2013/06/18 PHP
php新浪微博登录接口用法实例
2014/12/23 PHP
PHP实现的文件操作类及文件下载功能示例
2016/12/24 PHP
PHP实现文件上传与下载
2020/08/28 PHP
实现超用户体验 table排序javascript实现代码
2009/06/22 Javascript
js function使用心得
2010/05/10 Javascript
jquery实现的一个导航滚动效果具体代码
2013/05/27 Javascript
详述JavaScript实现继承的几种方式(推荐)
2016/03/22 Javascript
JS 清除字符串数组中,重复元素的实现方法
2016/05/24 Javascript
AngularJs  unit-testing(单元测试)详解
2016/09/02 Javascript
CSS3 media queries结合jQuery实现响应式导航
2016/09/30 Javascript
jquery获取easyui日期控件的值实现方法
2016/11/09 Javascript
基于vue2的table分页组件实现方法
2017/03/20 Javascript
node文字生成图片的示例代码
2017/10/26 Javascript
JQuery选中select组件被选中的值方法
2018/03/08 jQuery
vue解决弹出蒙层滑动穿透问题的方法
2018/09/22 Javascript
jQuery提示框插件SweetAlert用法分析
2019/08/05 jQuery
swiper4实现移动端导航切换
2020/10/16 Javascript
js 判断当前时间是否处于某个一个时间段内
2019/09/19 Javascript
vue使用自定义事件的表单输入组件用法详解【日期组件与货币组件】
2020/06/01 Javascript
node.js文件的复制、创建文件夹等相关操作
2021/02/05 Javascript
[05:08]顺网杯ISS-DOTA2赛歌 少女偶像Lunar青春演绎
2013/12/05 DOTA
[00:37]DOTA2上海特级锦标赛 OG战队宣传片
2016/03/03 DOTA
使用django-suit为django 1.7 admin后台添加模板
2014/11/18 Python
黑科技 Python脚本帮你找出微信上删除你好友的人
2016/01/07 Python
分享给Python新手们的几道简单练习题
2017/09/21 Python
使用NumPy和pandas对CSV文件进行写操作的实例
2018/06/14 Python
使用python语言,比较两个字符串是否相同的实例
2018/06/29 Python
Vinatis德国:法国领先的葡萄酒邮购公司
2020/09/07 全球购物
测绘专业大学生职业生涯规划书
2014/02/10 职场文书
2014年审计人员工作总结
2014/12/19 职场文书
怎样写家长意见
2015/06/04 职场文书
创业计划书之情侣餐厅
2019/09/29 职场文书
Tomcat配置访问日志和线程数
2022/05/06 Servers