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 相关文章推荐
验证码按回车不变解决方法
Mar 29 Javascript
JavaScript中的ArrayBuffer详细介绍
Dec 08 Javascript
10个很棒的jQuery代码片段
Sep 24 Javascript
Mvc提交表单的四种方法全程详解
Aug 10 Javascript
关于jquery中动态增加select,事件无效的快速解决方法
Aug 29 Javascript
AngularJS指令与指令之间的交互功能示例
Dec 14 Javascript
bootstrap组件之导航组件使用方法
Jan 19 Javascript
jquery实现图片轮播器
May 23 jQuery
js微信应用场景之微信音乐相册案例分享
Aug 11 Javascript
浅谈Angular4实现热加载开发旅程
Sep 08 Javascript
微信小程序实现星星评价效果
Nov 02 Javascript
layui的数据表格+springmvc实现搜索功能的例子
Sep 28 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 date()日期时间函数详解
2010/05/16 PHP
深入解析PHP垃圾回收机制对内存泄露的处理
2013/06/14 PHP
jQuery JSON实现无刷新三级联动实例探讨
2013/05/28 Javascript
jquery触发a标签跳转事件示例代码
2013/07/21 Javascript
javascript 动态创建表格
2015/01/08 Javascript
swtich/if...else的替代语句
2015/08/16 Javascript
AngularJS 表达式详细讲解及实例代码
2016/07/26 Javascript
jQuery实现的兼容性浮动层示例
2016/08/02 Javascript
jQuery的图片轮播插件PgwSlideshow使用详解
2016/08/11 Javascript
详解JavaScript模块化开发
2016/12/04 Javascript
Express框架之connect-flash详解
2017/05/31 Javascript
浅谈mint-ui loadmore组件注意的问题
2017/11/08 Javascript
js中split()方法得到的数组长度问题
2018/07/19 Javascript
Vue 引入AMap高德地图的实现代码
2019/04/29 Javascript
基于Nuxt.js项目的服务端性能优化与错误检测(容错处理)
2019/10/23 Javascript
微信小程序实现轨迹回放的示例代码
2019/12/13 Javascript
使用eslint和githooks统一前端风格的技巧
2020/07/29 Javascript
利用Python抓取行政区划码的方法
2016/11/28 Python
Python实现读取文件最后n行的方法
2017/02/23 Python
详解Python进程间通信之命名管道
2017/08/28 Python
使用opencv中匹配点对的坐标提取方式
2020/06/04 Python
CSS3制作炫酷的自定义发光文字
2016/03/28 HTML / CSS
卡塔尔航空官方网站:Qatar Airways
2017/02/08 全球购物
英国舒适型鞋履品牌:FitFlop
2017/05/17 全球购物
Desigual英国官网:在线购买原创服装
2018/03/09 全球购物
英国浴室洗脸盆购物网站:Click Basin
2018/06/08 全球购物
工业设计专业推荐信
2013/10/29 职场文书
上课说话检讨书大全
2014/01/22 职场文书
创业培训计划书
2014/05/03 职场文书
关于安全的标语
2014/06/10 职场文书
竞聘演讲稿怎么写
2014/08/28 职场文书
美国旅游签证工作证明
2014/10/14 职场文书
先进学校事迹材料
2014/12/30 职场文书
Go timer如何调度
2021/06/09 Golang
mysqldump进行数据备份详解
2022/07/15 MySQL
详解SQL报错盲注
2022/07/23 SQL Server