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 相关文章推荐
键盘控制事件应用教程大全
Nov 24 Javascript
jQuery中获取checkbox选中项等操作及注意事项
Nov 24 Javascript
同域jQuery(跨)iframe操作DOM(示例代码)
Dec 13 Javascript
黑帽seo劫持程序,js劫持搜索引擎代码
Sep 15 Javascript
js实现的万能flv网页播放器代码
Apr 30 Javascript
Angular2 Service实现简单音乐播放器服务
Feb 24 Javascript
VueJs 搭建Axios接口请求工具
Nov 20 Javascript
详解webpack loader和plugin编写
Oct 12 Javascript
100行代码实现一个vue分页组功能
Nov 06 Javascript
JavaScript实现五子棋游戏的方法详解
Jul 08 Javascript
详解关闭令人抓狂的ESlint 语法检测配置方法
Oct 28 Javascript
vuejs中父子组件之间通信方法实例详解
Jan 17 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
一步一步学习PHP(4) php 函数 补充2
2010/02/15 PHP
本地机apache配置基于域名的虚拟主机详解
2013/08/10 PHP
PHP单链表的实现代码
2016/07/05 PHP
js实现DIV的一些简单控制
2007/06/04 Javascript
javascript Math.random()随机数函数
2009/11/04 Javascript
jquery tablesorter.js 支持中文表格排序改进
2009/12/09 Javascript
javascript 处理事件绑定的一些兼容写法
2009/12/24 Javascript
jQuery.autocomplete 支持中文输入(firefox)修正方法
2011/03/10 Javascript
JavaScript在多浏览器下for循环的使用方法
2012/11/07 Javascript
js和jquery设置disabled属性为true使按钮失效
2014/08/07 Javascript
分享28款免费实用的 JQuery 图片和内容滑块插件
2014/12/15 Javascript
AngularJS入门教程之AngularJS指令
2016/04/18 Javascript
js仿腾讯QQ的web登陆界面
2016/08/19 Javascript
KnockoutJS 3.X API 第四章之表单submit、enable、disable绑定
2016/10/10 Javascript
微信js-sdk界面操作接口用法示例
2016/10/12 Javascript
Bootstrap CSS组件之面包屑导航(breadcrumb)
2016/12/17 Javascript
分享bootstrap学习笔记心得(组件及其属性)
2017/01/11 Javascript
深入学习nodejs中的async模块的使用方法
2017/07/12 NodeJs
Vue2 监听属性改变watch的实例代码
2018/08/27 Javascript
javascript将非数值转换为数值
2018/09/13 Javascript
js中Function引用类型常见有用的方法和属性详解
2019/12/11 Javascript
[02:37]TI8勇士令状不朽珍藏II视频展示
2018/06/23 DOTA
详解Python3.6的py文件打包生成exe
2018/07/13 Python
python实现修改固定模式的字符串内容操作示例
2019/12/30 Python
如何基于python实现年会抽奖工具
2020/10/20 Python
利用python 下载bilibili视频
2020/11/13 Python
详解HTML5中的元素与元素
2015/08/17 HTML / CSS
当当网官方旗舰店:中国图书销售夺金品牌
2018/04/02 全球购物
一站式跨境收款解决方案:Payoneer(派安盈)
2018/09/06 全球购物
我的珠宝盒:Ma boîte à bijoux
2019/08/27 全球购物
干部竞争上岗演讲稿
2014/09/11 职场文书
党政领导班子四风问题对照检查材料思想汇报
2014/10/02 职场文书
大学生党员自我批评思想汇报
2014/10/10 职场文书
门球健将观后感
2015/06/16 职场文书
如何利用js在两个html窗口间通信
2021/04/27 Javascript
mysql5.6主从搭建以及不同步问题详解
2021/12/04 MySQL