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 相关文章推荐
一个可以兼容IE FF的加为首页与加入收藏实现代码
Nov 02 Javascript
jquery序列化表单以及回调函数的使用示例
Jul 02 Javascript
原生JS实现网络彩票投注效果
Sep 25 Javascript
使用react-router4.0实现重定向和404功能的方法
Aug 28 Javascript
Vue 组件间的样式冲突污染
Aug 31 Javascript
javaScript实现鼠标在文字上悬浮时弹出悬浮层效果
Apr 12 Javascript
JS引用传递与值传递的区别与用法分析
Jun 01 Javascript
JavaScript 截取字符串代码实例
Sep 05 Javascript
Vue数字输入框组件的使用方法
Oct 19 Javascript
vue自定义指令实现仅支持输入数字和浮点型的示例
Oct 30 Javascript
基于JavaScript的数据结构队列动画实现示例解析
Aug 06 Javascript
ES6中的Javascript解构的实现
Oct 30 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 in_array 函数使用说明与in_array需要注意的地方说明
2010/04/13 PHP
thinkphp3.x自定义Action、Model及View的简单实现方法
2016/05/19 PHP
学习PHP Cookie处理函数
2016/08/09 PHP
PHP简单装饰器模式实现与用法示例
2017/06/22 PHP
PHP实现的堆排序算法详解
2017/08/17 PHP
PHP使用PDO实现mysql防注入功能详解
2019/12/20 PHP
解放web程序员的输入验证
2006/10/06 Javascript
javascript 学习之旅 (2)
2009/02/05 Javascript
5款Javascript颜色选择器
2009/10/25 Javascript
一些常用且实用的原生JavaScript函数
2010/09/08 Javascript
JQueryEasyUI Layout布局框架的使用
2013/04/08 Javascript
javascript瀑布流式图片懒加载实例解析与优化
2016/02/23 Javascript
BootStrap tab选项卡使用小结
2020/08/09 Javascript
BootStrap轮播HTML代码(推荐)
2016/12/10 Javascript
Bootstrap的popover(弹出框)在append后弹不出(失效)
2017/02/27 Javascript
JS匹配日期和时间的正则表达式示例
2017/05/12 Javascript
Javascript刷新页面的实例
2017/09/23 Javascript
微信小程序的生命周期的详解
2017/10/19 Javascript
Vue2.0结合webuploader实现文件分片上传功能
2018/03/09 Javascript
angularjs使用div模拟textarea文本框的方法
2018/10/02 Javascript
使用ECharts实现状态区间图
2018/10/25 Javascript
Vue+Element UI+Lumen实现通用表格分页功能
2019/02/02 Javascript
微信小程序实现的picker多级联动功能示例
2019/05/23 Javascript
vue学习之Vue-Router用法实例分析
2020/01/06 Javascript
[02:42]2014DOTA2国际邀请赛 三冰专访:我会打到Ti20
2014/07/13 DOTA
Python 实现简单的电话本功能
2015/08/09 Python
用Django写天气预报查询网站
2018/10/21 Python
用python解压分析jar包实例
2020/01/16 Python
jupyter lab文件导出/下载方式
2020/04/22 Python
IE滤镜与CSS3效果(详细整理分享)
2013/01/25 HTML / CSS
美国精品地毯网站:Boutique Rugs
2020/03/04 全球购物
业务主管岗位职责范本
2013/12/25 职场文书
安全生产月活动总结
2014/05/04 职场文书
工商管理本科生求职信
2014/07/13 职场文书
2014年服装销售工作总结
2014/11/27 职场文书
税务会计岗位职责
2015/04/02 职场文书