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依赖综合症”
May 13 Javascript
jquery $.each() 使用小探
Aug 23 Javascript
JQuery验证jsp页面属性是否为空(实例代码)
Nov 08 Javascript
js字符串转换成数字与数字转换成字符串的实现方法
Jan 08 Javascript
js取float型小数点后两位数的方法
Jan 18 Javascript
javascript实现复选框选中属性
Mar 25 Javascript
js实现分享到随页面滚动而滑动效果的方法
Apr 10 Javascript
json传值以及ajax接收详解
May 24 Javascript
PHP捕捉异常中断的方法
Oct 24 Javascript
微信小程序分享功能之按钮button 边框隐藏和点击隐藏
Jun 14 Javascript
vue权限路由实现的方法示例总结
Jul 29 Javascript
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编写和读取XML的几种方式
2013/01/12 PHP
PHP cURL初始化和执行方法入门级代码
2015/05/28 PHP
PHP文件上传处理案例分析
2016/10/15 PHP
浅谈php和js中json的编码和解码
2016/10/24 PHP
Jquery命名冲突解决的五种方案分享
2012/03/16 Javascript
jQuery中:selected选择器用法实例
2015/01/04 Javascript
javaScript基础语法介绍
2015/02/28 Javascript
浅析四种常见的Javascript声明循环变量的书写方式
2015/10/14 Javascript
JS中的forEach、$.each、map方法推荐
2016/04/05 Javascript
js 显示日期时间的实例(时间过一秒加1)
2017/10/25 Javascript
从setTimeout看js函数执行过程
2017/12/19 Javascript
JavaScript引用类型Function实例详解
2018/08/09 Javascript
JS函数动态传递参数的方法分析【基于arguments对象】
2019/06/05 Javascript
对vuex中getters计算过滤操作详解
2019/11/06 Javascript
使用Bootstrap做一个朝代历史表
2019/12/10 Javascript
Javascript如何递归遍历本地文件夹
2020/08/06 Javascript
JavaScript实现世界各地时间显示
2020/09/07 Javascript
解决iView Table组件宽度只变大不变小的问题
2020/11/13 Javascript
Node使用koa2实现一个简单JWT鉴权的方法
2021/01/26 Javascript
[02:27]2018DOTA2亚洲邀请赛赛前采访-OpTic
2018/04/03 DOTA
Python中的if、else、elif语句用法简明讲解
2016/03/11 Python
python中正则表达式的使用方法
2018/02/25 Python
python 删除列表里所有空格项的方法总结
2018/04/18 Python
python遍历一个目录,输出所有的文件名的实例
2018/04/23 Python
将python文件打包成EXE应用程序的方法
2019/05/22 Python
Python获取统计自己的qq群成员信息的方法
2019/11/15 Python
使用Python爬虫库requests发送表单数据和JSON数据
2020/01/25 Python
在pycharm中文件取消用 pytest模式打开的操作
2020/09/01 Python
Linux不知道文件后缀名怎么判断文件类型
2012/04/26 面试题
测试工程师岗位职责
2013/11/28 职场文书
法学个人求职信范文
2014/01/27 职场文书
夫妻双方自愿离婚协议书
2014/10/24 职场文书
党的群众路线教育实践活动调研报告
2014/11/03 职场文书
2016元旦主持人经典开场白台词
2015/12/03 职场文书
导游词之张家口
2019/12/13 职场文书
Consul在linux环境的集群部署
2022/04/08 Servers