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 相关文章推荐
ie 处理 gif动画 的onload 事件的一个 bug
Apr 12 Javascript
JavaScript基本概念初级讲解论坛贴的学习记录
Feb 22 Javascript
关于jQuery参考实例 1.0 jQuery的哲学
Apr 07 Javascript
理解Javascript的动态语言特性
Jun 17 Javascript
jQuery头像裁剪工具jcrop用法实例(附演示与demo源码下载)
Jan 22 Javascript
jQuery File Upload文件上传插件使用详解
Dec 06 Javascript
jQuery插件zTree实现删除树子节点的方法示例
Mar 08 Javascript
JS分页的实现(同步与异步)
Sep 16 Javascript
vue动态绑定class的几种常用方式小结
May 21 Javascript
在Node.js中将SVG图像转换为PNG,JPEG,TIFF,WEBP和HEIF格式的方法
Aug 22 Javascript
Webpack中SplitChunksPlugin 配置参数详解
Mar 24 Javascript
如何在JS文件中获取Vue组件
Sep 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
PHP常见的几种攻击方式实例小结
2019/04/29 PHP
jQuery(1.3.2) 7行代码搞定跟随屏幕滚动的层
2009/05/21 Javascript
将函数的实际参数转换成数组的方法
2010/01/25 Javascript
10个实用的脚本代码工具
2010/05/04 Javascript
validator验证控件使用代码
2010/11/23 Javascript
chrome原生方法之数组
2011/11/30 Javascript
jQuery的each终止或跳过示例代码
2013/12/12 Javascript
jQuery的text()方法用法分析
2014/12/20 Javascript
浅析JS中对函数function的理解(基础篇)
2016/10/14 Javascript
Vue.JS入门教程之事件监听
2016/12/01 Javascript
原生JS实现的雪花飘落动画效果
2018/05/03 Javascript
jquery实现弹窗(系统提示框)效果
2019/12/10 jQuery
js实现圆形显示鼠标单击位置
2020/02/11 Javascript
python3+PyQt5重新实现QT事件处理程序
2018/04/19 Python
python之文件读取一行一行的方法
2018/07/12 Python
Python批量修改图片分辨率的实例代码
2019/07/04 Python
使用虚拟环境打包python为exe 文件的方法
2019/08/29 Python
python如何写try语句
2020/07/14 Python
CSS3自定义滚动条样式的示例代码
2017/08/21 HTML / CSS
NBA德国官方网上商店:NBA Store德国
2018/04/13 全球购物
日本高岛屋百货购物网站:TAKASHIMAYA
2019/03/24 全球购物
如何在存储过程中使用Loop
2016/01/05 面试题
开朗女孩的自我评价
2014/02/10 职场文书
《果园机器人》教学反思
2014/04/13 职场文书
领导班子四风查摆对照检查材料思想汇报
2014/10/05 职场文书
2015年党员干部承诺书
2015/01/21 职场文书
白鹤梁导游词
2015/02/06 职场文书
爱国影片观后感
2015/06/18 职场文书
新闻稿件写作技巧
2015/07/18 职场文书
《走遍天下书为侣》教学反思
2016/02/22 职场文书
HR必备:超全面的薪酬待遇管理方案!
2019/07/12 职场文书
三年级作文之趣事作文
2019/11/04 职场文书
详解Java ES多节点任务的高效分发与收集实现
2021/06/30 Java/Android
使用ORM新增数据在Mysql中的操作步骤
2021/07/26 MySQL
vue3获取当前路由地址
2022/02/18 Vue.js
nginx负载功能+nfs服务器功能解析
2022/02/28 Servers