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 相关文章推荐
JS获取父节点方法
Aug 20 Javascript
EditPlus注册码生成器(js代码实现)
Mar 25 Javascript
javascript实现的DES加密示例
Oct 30 Javascript
什么是Node.js?Node.js详细介绍
Jun 01 Javascript
解决jquery插件:TypeError:$.browser is undefined报错的方法
Nov 21 Javascript
jQuery validate验证插件使用详解
May 11 Javascript
Bootstrap Navbar Component实现响应式导航
Oct 08 Javascript
详解基于electron制作一个node压缩图片的桌面应用
Jan 29 Javascript
百度小程序之间的页面通信过程详解
Jul 18 Javascript
JavaScript修改注册表实例代码
Jan 05 Javascript
JS常用正则表达式超全集(密码强度校验,金额校验,IE版本,IPv4,IPv6校验)
Feb 03 Javascript
手写Vue2.0 数据劫持的示例
Mar 04 Vue.js
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
php使用标签替换的方式生成静态页面
2015/05/21 PHP
详解WordPress中过滤链接与过滤SQL语句的方法
2015/12/18 PHP
PHP socket 模拟POST 请求实例代码
2016/07/18 PHP
PHP实现对二维数组某个键排序的方法
2016/09/14 PHP
python进程与线程小结实例分析
2018/11/11 PHP
javascript String 的扩展方法集合
2008/06/01 Javascript
解析Javascript小括号“()”的多义性
2013/12/03 Javascript
屏蔽相应键盘按钮操作
2014/03/10 Javascript
js 动态修改css文件的方法
2014/08/05 Javascript
jquery分隔Url的param方法(推荐)
2016/05/25 Javascript
原生js编写焦点图效果
2016/12/08 Javascript
JS基于面向对象实现的多个倒计时器功能示例
2017/02/28 Javascript
js禁止Backspace键使浏览器后退的实现方法
2017/09/01 Javascript
javaScript中的空值和假值
2017/12/18 Javascript
vue 插值 v-once,v-text, v-html详解
2018/01/19 Javascript
vue-cli启动本地服务局域网不能访问的原因分析
2018/01/22 Javascript
深入理解vue中slot与slot-scope的具体使用
2018/01/26 Javascript
用Nodejs实现在终端中炒股的实现
2020/10/18 NodeJs
小程序自定义弹框效果
2020/11/16 Javascript
[46:44]VG vs TNC Supermajor小组赛B组败者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
Python实现栈的方法
2015/05/26 Python
python列表的常用操作方法小结
2016/05/21 Python
Ubuntu下创建虚拟独立的Python环境全过程
2017/02/10 Python
Django REST Framework 分页(Pagination)详解
2020/11/30 Python
Django实现简单的分页功能
2021/02/22 Python
可以随进度显示不同颜色的css3进度条分享
2014/04/11 HTML / CSS
html5仿支付宝密码框的实现代码
2017/09/06 HTML / CSS
捷克领先的户外服装及配件市场零售商:ALPINE PRO
2018/01/09 全球购物
S’well Bottle保温杯官网:绝缘不锈钢水瓶
2018/05/09 全球购物
Peter Millar官网:美国高档生活服饰品牌
2018/07/02 全球购物
网页美工求职信范文
2014/04/17 职场文书
城管综合整治方案
2014/05/01 职场文书
交警失职检讨书
2015/01/26 职场文书
哈姆雷特读书笔记
2015/06/29 职场文书
Java 使用类型为Object的变量指向任意类型的对象
2022/04/13 Java/Android
python区块链持久化和命令行接口实现简版
2022/05/25 Python