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 相关文章推荐
jQuery 插件 将this下的div轮番显示
Apr 09 Javascript
JavaScript基础语法让人疑惑的地方小结
May 23 Javascript
让新消息在网页标题闪烁提示的jQuery代码
Nov 04 Javascript
理解JS绑定事件
Jan 19 Javascript
JS作为值的函数用法示例
Jun 20 Javascript
Bootstrap select多选下拉框实现代码
Dec 23 Javascript
jquery submit()不能提交表单的解决方法
Apr 24 jQuery
解决vue2.x中数据渲染以及vuex缓存的问题
Jul 13 Javascript
详解vue-meta如何让你更优雅的管理头部标签
Jan 18 Javascript
浅谈vue-cli 3.0.x 初体验
Apr 11 Javascript
微信小程序反编译的实现
Dec 10 Javascript
Vue的过滤器你真了解吗
Feb 24 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中功能强大却很少使用的函数实例小结
2016/11/10 PHP
PHP实现的简单路由和类自动加载功能
2018/03/13 PHP
js获取图片长和宽度的代码
2009/11/24 Javascript
jquery.AutoComplete.js中文修正版(支持firefox)
2010/04/09 Javascript
JS.findElementById()使用介绍
2013/09/21 Javascript
jQuery实现默认是闭合的FAQ展开效果菜单
2015/09/14 Javascript
分享有关jQuery中animate、slide、fade等动画的连续触发、滞后反复执行的bug
2016/01/10 Javascript
jQuery Mobile中的button按钮组件基础使用教程
2016/05/23 Javascript
关于vue.js弹窗组件的知识点总结
2016/09/11 Javascript
jQuery的Cookie封装,与PHP交互的简单实现
2016/10/05 Javascript
JavaScript实现数组降维详解
2017/01/05 Javascript
EasyUI为Numberbox添加blur事件的方法
2017/03/05 Javascript
利用vue.js插入dom节点的方法
2017/03/15 Javascript
javascript基础进阶_深入剖析执行环境及作用域链
2017/09/05 Javascript
JS实现瀑布流布局
2017/10/21 Javascript
setTimeout时间设置为0详细解析
2018/03/13 Javascript
微信小程序模拟cookie的实现
2018/06/20 Javascript
electron踩坑之dialog中的callback解决
2020/10/06 Javascript
python切换hosts文件代码示例
2013/12/31 Python
python基于BeautifulSoup实现抓取网页指定内容的方法
2015/07/09 Python
浅谈Python 对象内存占用
2016/07/15 Python
python数据类型_元组、字典常用操作方法(介绍)
2017/05/30 Python
浅谈Django中的数据库模型类-models.py(一对一的关系)
2018/05/30 Python
使用Python更换外网IP的方法
2018/07/09 Python
Django框架验证码用法实例分析
2019/05/10 Python
python3获取当前目录的实现方法
2019/07/29 Python
Python学习笔记之For循环用法详解
2019/08/14 Python
使用tqdm显示Python代码执行进度功能
2019/12/08 Python
Bibloo匈牙利:女装、男装、童装及鞋子和配饰
2019/04/14 全球购物
致百米运动员广播稿
2014/01/29 职场文书
决心书范文
2014/03/11 职场文书
创建绿色学校先进个人材料
2014/08/20 职场文书
2015年资料员工作总结
2015/04/25 职场文书
庆祝教师节主持词
2015/07/06 职场文书
tp5使用layui实现多个图片上传(带附件选择)的方法实例
2021/11/17 PHP
Tomcat 与 maven 的安装与使用教程
2022/06/16 Servers