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 相关文章推荐
多浏览器支持的右下角浮动窗口
Apr 01 Javascript
理解Javascript_01_理解内存分配原理分析
Oct 11 Javascript
js检测输入内容全为空格的方法
May 03 Javascript
浅析JQuery中的html(),text(),val()区别
Sep 01 Javascript
jQuery同步提交示例代码
Dec 12 Javascript
详解JavaScript基于面向对象之继承实例
Dec 16 Javascript
JS、jQuery中select的用法详解
Apr 21 Javascript
jquery单击文字或图片内容放大并居中显示
Jun 23 jQuery
Vue.js移动端左滑删除组件的实现代码
Sep 08 Javascript
Javascript刷新页面的实例
Sep 23 Javascript
Vue中v-for的数据分组实例
Mar 07 Javascript
vue.js Router中嵌套路由的实用示例
Jun 27 Vue.js
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
网页游戏开发入门教程二(游戏模式+系统)
2009/11/02 PHP
PHP判断搜索引擎蜘蛛并自动记忆到文件的代码
2012/02/04 PHP
深入php var_dump()函数的详解
2013/06/05 PHP
修改apache配置文件去除thinkphp url中的index.php
2014/01/17 PHP
thinkPHP实现递归循环栏目并按照树形结构无限极输出的方法
2016/05/19 PHP
PHP页面间传递值和保持值的方法
2016/08/24 PHP
PHP抓取远程图片(含不带后缀的)教程详解
2016/10/21 PHP
JavaScript window.setTimeout() 的详细用法
2009/11/04 Javascript
克隆javascript对象的三个方法小结
2011/01/12 Javascript
Jquery读取URL参数小例子
2013/08/30 Javascript
javascript中CheckBox全选终极方案
2015/05/20 Javascript
jQuery操作基本控件方法实例分析
2015/12/31 Javascript
提升jQuery的性能需要做好七件事
2016/01/11 Javascript
利用yarn实现一个webpack+react种子
2016/10/25 Javascript
JS查找孩子节点简单示例
2019/07/25 Javascript
python类和继承用法实例
2015/07/07 Python
python切片及sys.argv[]用法详解
2018/05/25 Python
Python测试模块doctest使用解析
2019/08/10 Python
在OpenCV里使用特征匹配和单映射变换的代码详解
2019/10/23 Python
python scrapy重复执行实现代码详解
2019/12/28 Python
什么是python的列表推导式
2020/05/26 Python
Python+OpenCV图像处理——打印图片属性、设置存储路径、调用摄像头
2020/10/22 Python
用python爬虫批量下载pdf的实现
2020/12/01 Python
CSS3 实现时间轴动画
2020/11/25 HTML / CSS
世界上最伟大的马产品:Equiderma
2020/01/07 全球购物
Linux中如何用命令创建目录
2016/12/02 面试题
部队党性分析材料
2014/02/16 职场文书
安全生产实施方案
2014/02/23 职场文书
环境保护建议书
2014/08/26 职场文书
群众路线教育实践活动自我剖析思想汇报
2014/10/04 职场文书
安全生产标语大全
2014/10/06 职场文书
个人公司授权委托书范本
2014/10/12 职场文书
2015年八一建军节演讲稿
2015/03/19 职场文书
创业计划书之情侣餐厅
2019/09/29 职场文书
解决Golang中goroutine执行速度的问题
2021/05/02 Golang
Python&Matlab实现樱花的绘制
2022/04/07 Python