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 相关文章推荐
新手入门常用代码集锦
Jan 11 Javascript
jquery判断字符输入个数(数字英文长度记为1,中文记为2,超过长度自动截取)
Oct 15 Javascript
关于window.pageYOffset和document.documentElement.scrollTop
Apr 05 Javascript
JQuery防止退格键网页后退的实现代码
Mar 23 Javascript
详解Bootstrap按钮
Jan 04 Javascript
jQuery EasyUi实战教程之布局篇
Jan 26 Javascript
使用node.js中的Buffer类处理二进制数据的方法
Nov 26 Javascript
AJAX和jQuery动态加载数据的实现方法
Dec 05 Javascript
用Vue.extend构建消息提示组件的方法实例
Aug 08 Javascript
使用Fullpage插件快速开发整屏翻页的页面
Sep 13 Javascript
JS使用对象的defineProperty进行变量监控操作示例
Feb 02 Javascript
VUE table表格动态添加一列数据,新增的这些数据不可以编辑(v-model绑定的数据不能实时更新)
Apr 03 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实际应用经验篇(4)
2006/10/09 PHP
相对路径转化成绝对路径
2007/04/10 PHP
PHP setTime 设置当前时间的代码
2012/08/27 PHP
Laravel 数据库加密及数据库表前缀配置方法
2019/10/10 PHP
JavaScript 私有成员分析
2009/01/13 Javascript
最佳JS代码编写的14条技巧
2011/01/09 Javascript
js单例模式的两种方案
2013/10/22 Javascript
javascript函数声明和函数表达式区别分析
2014/12/02 Javascript
详解javascript中原始数据类型Null和Undefined
2015/12/17 Javascript
详解React开发中使用require.ensure()按需加载ES6组件
2017/05/12 Javascript
bootstrap daterangepicker双日历时间段选择控件详解
2017/06/15 Javascript
详解webpack 打包文件体积过大解决方案(code splitting)
2018/04/10 Javascript
layui使用表格渲染获取行数据的例子
2019/09/13 Javascript
js 获取扫码枪输入数据的方法
2020/06/10 Javascript
vue实现井字棋游戏
2020/09/29 Javascript
Python中的文件和目录操作实现代码
2011/03/13 Python
利用python模拟sql语句对员工表格进行增删改查
2017/07/05 Python
python3 selenium 切换窗口的几种方法小结
2018/05/21 Python
python+opencv+caffe+摄像头做目标检测的实例代码
2018/08/03 Python
浅谈python中拼接路径os.path.join斜杠的问题
2018/10/23 Python
浅谈Python编程中3个常用的数据结构和算法
2019/04/30 Python
树莓派4B+opencv4+python 打开摄像头的实现方法
2019/10/18 Python
Python笔记之代理模式
2019/11/20 Python
python模拟实现斗地主发牌
2020/01/07 Python
Jupyter Notebook输出矢量图实例
2020/04/14 Python
阿根廷旅游网站:almundo阿根廷
2018/02/12 全球购物
阿根廷票务网站:StubHub阿根廷
2018/04/13 全球购物
碧欧泉Biotherm加拿大官方网站:法国高端护肤品牌
2019/10/18 全球购物
Linux的主要特性
2016/09/03 面试题
医师定期考核实施方案
2014/05/07 职场文书
党员查摆剖析材料
2014/10/10 职场文书
秋菊打官司观后感
2015/06/03 职场文书
新学期开学标语2015
2015/07/16 职场文书
2015年网络舆情工作总结
2015/07/24 职场文书
全民创业工作总结
2015/08/13 职场文书
婚礼长辈答谢词
2015/09/29 职场文书