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 相关文章推荐
JQuery最佳实践之精妙的自定义事件
Aug 11 Javascript
基于JQuery的一个简单的鼠标跟随提示效果
Sep 23 Javascript
JQEasy-ui在IE9以下版本中二次加载的问题分析及处理方法
Jun 23 Javascript
jQuery中click事件用法实例
Dec 26 Javascript
JavaScript中创建字典对象(dictionary)实例
Mar 31 Javascript
javascript中select下拉框的用法总结
Jan 07 Javascript
基于javascript实现tab切换特效
Mar 29 Javascript
BootStrap的alert提示框的关闭后再显示怎么解决
May 17 Javascript
JavaScript_ECMA5数组新特性详解
Jun 12 Javascript
jQuery插件ajaxFileUpload使用详解
Jan 10 Javascript
node.js连接MongoDB数据库的2种方法教程
May 17 Javascript
JavaScript设计模式之代理模式实例分析
Jan 16 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
德生S2000收音机更换“钕铁硼”全频扬声器
2021/03/02 无线电
php实现网站插件机制的方法
2009/11/10 PHP
PHP排序算法的复习和总结
2012/02/15 PHP
PHP正确解析UTF-8字符串技巧应用
2012/11/07 PHP
PHP5常用函数列表(分享)
2013/06/07 PHP
PHP独立Session数据库存储操作类分享
2014/06/11 PHP
PHP生成等比缩略图类和自定义函数分享
2014/06/25 PHP
PHP 实现类似js中alert() 提示框
2015/03/18 PHP
php实现网页缓存的工具类分享
2015/07/14 PHP
JavaScript 页面编码与浏览器类型判断代码
2010/06/03 Javascript
javascript 图片裁剪技巧解读
2012/11/15 Javascript
jQuery Pagination Ajax分页插件(分页切换时无刷新与延迟)中文翻译版
2013/01/11 Javascript
把字符串按照特定的字母顺序进行排序的js代码
2014/01/28 Javascript
jquery防止重复执行动画避免页面混乱
2014/04/22 Javascript
js获取当前时间显示在页面上并每秒刷新
2014/12/24 Javascript
nodejs 整合kindEditor实现图片上传
2015/02/03 NodeJs
JQuery显示隐藏DIV的方法及代码实例
2015/04/16 Javascript
JS实现弹出浮动窗口(支持鼠标拖动和关闭)实例详解
2015/08/06 Javascript
JS插件plupload.js实现多图上传并显示进度条
2016/11/29 Javascript
vue单个组件实现无限层级多选菜单功能
2018/04/10 Javascript
three.js利用射线Raycaster进行碰撞检测
2020/03/12 Javascript
[02:58]献给西雅图的情书_高清
2014/05/29 DOTA
python实现跨文件全局变量的方法
2014/07/07 Python
Python使用progressbar模块实现的显示进度条功能
2018/05/31 Python
Windows下Anaconda2安装NLTK教程
2018/09/19 Python
python使用tkinter库实现五子棋游戏
2019/06/18 Python
python读取csv文件指定行的2种方法详解
2020/02/13 Python
微信浏览器取消缓存的方法
2015/03/28 HTML / CSS
Stokke美国官方网店:高级儿童家具、推车、汽车座椅和配件
2020/06/06 全球购物
一套软件开发工程师笔试题
2015/05/18 面试题
公司领导推荐信
2013/11/12 职场文书
美德少年事迹材料
2014/01/23 职场文书
婚宴领导致辞
2015/07/28 职场文书
导游词之河北邯郸
2019/09/12 职场文书
详解python的内存分配机制
2021/05/10 Python
CSS作用域(样式分割)的使用汇总
2021/11/07 HTML / CSS