vue 自定义 select内置组件


Posted in Javascript onApril 10, 2018

1.整合了第三方 jQuery 插件 (select2)

vue 自定义 select内置组件

<!DOCTYPE html> 
<html> 
<head> 
  <meta charset="UTF-8"> 
  <title></title> 
  <link rel="stylesheet" href="js/select2/select2.min.css" /> 
  <style> 
    html, body { 
 font: 13px/18px sans-serif; 
} 
select { 
 min-width: 300px; 
} 
  </style> 
</head> 
<body> 
<div id="el"> 
  <p>选中的: {{ selected }}</p> 
  <select2 :options="options" v-model="selected"></select2> 
</div> 
  <script src="js/jQuery-2.1.4.min.js"></script> 
  <script src="js/select2/select2.min.js"></script> 
  <script src="http://cdnjs.cloudflare.com/ajax/libs/vue/2.1.3/vue.js"></script>   
<script> 
  Vue.component('select2', { 
    props: ['options', 'value'], 
    template: '<select><slot></slot></select>', 
    mounted: function () { 
      var vm = this;// init select2 
      $(this.$el).select2({ data: this.options }).val(this.value).trigger('change').on('change', function () { 
        // emit event on change. 
        vm.$emit('input', this.value) 
      }) 
    }, 
    watch: { 
      value: function (value) { 
          // update value 
        $(this.$el).val(value).trigger('change') 
      }, 
      options: function (options) { 
         // update options 
        $(this.$el).empty().select2({ data: options }) 
      } 
    }, 
    destroyed: function () { 
      $(this.$el).off().select2('destroy') 
    } 
  }) 
var vm = new Vue({ 
  el: '#el', 
  data: { 
    selected: 2, 
    options: [ 
      { id: 0, text: '苹果' }, 
      { id: 1, text: '香蕉' }, 
      { id: 2, text: '香梨' }, 
      { id: 3, text: '榴莲' }, 
      { id: 4, text: '西瓜' } 
    ] 
  } 
}) 
</script> 
</body> 
</html>

2.简单select

vue 自定义 select内置组件

<!DOCTYPE html>  
<html lang="en">  
<head>  
<meta charset="utf-8">  
  <style>  
  *{ 
    padding: 0; 
    margin: 0; 
  } 
  ul,li { 
    list-style: none; 
  } 
  li { 
    line-height: 2em; 
  } 
  li:hover { 
    background-color: #f9f9f9; 
    border-radius:5px; 
    cursor: pointer; 
  } 
  input{ 
    cursor:pointer; 
    outline:none; 
  } 
  #app { 
    margin-top: 20px; 
  } 
  #app h2 { 
    text-align: center; 
  } 
  .wrap { 
    background-color: rgba(56, 170, 214, 0.45); 
    border-radius: 20px; 
    width: 300px; 
    margin: 40px; 
    padding: 20px; 
  } 
  input[type="button"] { 
    font-size:14px; 
    margin-left:2px; 
    padding:2px 5px; 
    background-color:rgb(228, 33, 33); 
    color:white; 
    border:1px solid rgb(228, 33, 33); 
    border-radius:5px; 
  } 
  .clearFix { 
    padding-left: 
  } 
  input.keyWord { 
    border: 1px solid #777777; 
    border-radius: 10px; 
    height: 30px; 
    width: 80%; 
    padding-left: 10px; 
    font-size: 16px; 
  } 
  ul.list { 
    margin: 20px 0; 
  } 
  ul.list li { 
    padding: 10px 0 0 10px; 
  } 
</style>  
</head>  
 <body>  
 <div id="app"> 
    <div style="float: left;"> 
      <h2>自定义下拉框</h2> 
      <custom-select btn-value="查询" v-bind:list="list1"></custom-select> 
    </div> 
    <div style="float: left;"> 
      <h2>自定义下拉框2</h2> 
      <custom-select btn-value="搜索" v-bind:list="list2"></custom-select> 
    </div> 
  </div> 
  <div id="app1"> 
    <custom-select></custom-select> 
  </div> 
    <script src="http://cdnjs.cloudflare.com/ajax/libs/vue/2.1.3/vue.js"></script>  
 <script> 
    Vue.component("custom-select",{ 
      data(){ 
        return { 
          selectShow:false, 
          val:"" 
        } 
      }, 
      props:["btnValue","list"], 
      template:`<section class="wrap"> 
            <div class="searchIpt clearFix"> 
              <div class="clearFix"> 
                <input type="text" class="keyWord" :value="val" @click="selectShow = !selectShow" /> 
                <input type="button" :value="btnValue" /> 
                <span></span> 
              </div> 
              <custom-list  
                v-show="selectShow"  
                :list="list"  
                v-on:receive="changeValueHandle" 
              > 
              </custom-list> 
            </div> 
           </section>`, 
      methods:{ 
        changeValueHandle(value){ 
          this.val = value; 
        } 
      } 
    }); 
    Vue.component("custom-list",{ 
      props:["list"], 
      template:`<ul class="list"> 
              <li v-for="item in list" @click="selectValueHandle(item)">{{item}} 
              </li> 
           </ul>`, 
      methods:{ 
        selectValueHandle:function(item){ 
          this.$emit("receive",item) 
        } 
      } 
    }) 
    new Vue({ 
      el:"#app", 
      data:{ 
        list1:['北京','上海','广州','杭州'], 
        list2:['17-01-11','17-02-11','17-03-11','17-04-11'], 
      } 
    }) 
  </script> 
  </body>  
</html>

参考:

1.内置组件

总结

以上所述是小编给大家介绍vue 自定义 select内置组件,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
js取滚动条的尺寸的函数代码
Nov 30 Javascript
Javascript实现简单二级下拉菜单实例
Jun 15 Javascript
jQuery往返城市和日期查询实例讲解
Oct 09 Javascript
超详细的javascript数组方法汇总
Nov 21 Javascript
快速掌握Node.js中setTimeout和setInterval的使用方法
Mar 21 Javascript
JavaScript中省略元素对数组长度的影响
Oct 26 Javascript
JS基于递归实现倒计时效果的方法
Nov 26 Javascript
微信小程序 表单Form实例详解(附源码)
Dec 22 Javascript
微信小程序picker组件简单用法示例【附demo源码下载】
Dec 05 Javascript
vue-quill-editor+plupload富文本编辑器实例详解
Oct 19 Javascript
jQuery+PHP+Ajax实现动态数字统计展示功能
Dec 25 jQuery
vue-cli 关闭热更新操作
Sep 18 Javascript
JavaScript如何对图片进行黑白化
Apr 10 #Javascript
axios 处理 302 状态码的解决方法
Apr 10 #Javascript
vue.js中npm安装教程图解
Apr 10 #Javascript
vue实现验证码按钮倒计时功能
Apr 10 #Javascript
vue 微信授权登录解决方案
Apr 10 #Javascript
详解给Vue2路由导航钩子和axios拦截器做个封装
Apr 10 #Javascript
详解webpack 打包文件体积过大解决方案(code splitting)
Apr 10 #Javascript
You might like
php基础学习之变量的使用
2011/06/09 PHP
深入探讨PHP中的内存管理问题
2011/08/31 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
2017/12/25 PHP
关于jQuery $.isNumeric vs. $.isNaN vs. isNaN
2013/04/15 Javascript
javascript(js)的小数点乘法除法问题详解
2014/03/07 Javascript
node.js中的fs.link方法使用说明
2014/12/15 Javascript
基于OL2实现百度地图ABCD marker的效果
2015/10/01 Javascript
BootStrap创建响应式导航条实例代码
2016/05/31 Javascript
Json对象和字符串互相转换json数据拼接和JSON使用方式详细介绍(小结)
2016/10/25 Javascript
利用jquery实现下拉框的禁用与启用
2016/12/07 Javascript
three.js实现3D影院的原理的代码分析
2017/12/18 Javascript
ng-repeat指令在迭代对象时的去重方法
2018/10/02 Javascript
基于three.js实现的3D粒子动效实例代码
2019/04/09 Javascript
JavaScript中判断为整数的多种方式及保留两位小数的方法
2019/09/09 Javascript
Vue在chrome44偶现点击子元素事件无法冒泡的解决方法
2019/12/15 Javascript
Vue实现腾讯云点播视频上传功能的实现代码
2020/08/17 Javascript
vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)
2021/03/01 Vue.js
Python的dict字典结构操作方法学习笔记
2016/05/07 Python
Tensorflow 利用tf.contrib.learn建立输入函数的方法
2018/02/08 Python
Python学生信息管理系统修改版
2018/03/13 Python
Python中交换两个元素的实现方法
2018/06/29 Python
Python面向对象之类的定义与继承用法示例
2019/01/14 Python
Django页面数据的缓存与使用的具体方法
2019/04/23 Python
Python爬虫图片懒加载技术 selenium和PhantomJS解析
2019/09/18 Python
python3 使用openpyxl将mysql数据写入xlsx的操作
2020/05/15 Python
Python Switch Case三种实现方法代码实例
2020/06/18 Python
python上selenium的弹框操作实现
2020/07/13 Python
俄罗斯茶和咖啡网上商店:Tea.ru
2021/01/26 全球购物
实习医生自我评价
2013/09/22 职场文书
医学生实习自我鉴定
2013/09/27 职场文书
会计找工作求职信范文
2013/12/09 职场文书
《在家里》教后反思
2014/03/01 职场文书
卫校毕业生个人自我鉴定
2014/04/28 职场文书
大学活动总结范文
2014/04/29 职场文书
护林员个人总结
2015/03/04 职场文书
自书遗嘱范文
2015/08/07 职场文书