Vue实现自定义下拉菜单功能


Posted in Javascript onJuly 16, 2018

先看例子,后面有对用到的知识点的总结

效果图:

Vue实现自定义下拉菜单功能

实现代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>组件练习</title>
  <link rel="stylesheet" type="text/css" href="component.css" rel="external nofollow" />
  <script src="vue.js"></script>
</head>
<body>
<div id="app">
  <h2>组件1</h2>
  <custom-select btn="查询" :list="list1"></custom-select>
  <h2>菜单2</h2>
  <custom-select btn="搜索" :list="list2"></custom-select>
</div>
<script>
  //注册组件
  let list1 = ["北京","上海","深圳","郑州","南阳"];
  let list2 = ["胡歌","陈默","陶亚东","刘同"];
  Vue.component("custom-select",{
    data:function(){
      return {
        selectShow:false,
        val:""
      }
    },
    props:["btn","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="btn"/>
        <span></span>
      </div>
      <custom-list
      v-show="selectShow"
       :list="list"
       v-on:value1="selectValueHandle"
       ></custom-list>
    </div>
  </section>
    `,
    methods:{
      selectValueHandle(value){
        this.val = value;
      }
    }
  });
  Vue.component("custom-list",{
    props:["list"],
    template:`
      <ul class="list">
        <li
          v-for="item in list"
          @click="searchValueHandle(item)"
        >{{item}}</li>
      </ul>
    `,
    methods:{
      searchValueHandle(item){
        this.$emit("value1",item)
      }
    }
  });
  var vm = new Vue({
    el:"#app",
    data:{
      list1:list1,
      list2:list2
    }
  });
</script>
</body>
</html>

考虑到一些朋友想要css代码,但避免css占据太多位置,所以此处将css压缩了,如果不需要看css的可以直接跳过哈

body{margin:0;font-family:"微软雅黑"}ul li{margin:0;padding:0;list-style:none}input{outline:0;cursor:pointer}.clearFix:after{display:block;content:"";clear:both}.wrap{width:348px;padding:100px 76px 50px;margin:50px;background:url(images/select_bg.png) no-repeat;box-shadow:2px 2px 10px #6789ad}.searchIpt{position:relative;width:336px;border:1px solid #3736ae;padding:5px;border-radius:24px;background:#e4e4fe}.searchIpt input{line-height:34px;border-radius:18px}.searchIpt input:nth-of-type(1){float:left;width:228px;padding-left:40px;border:1px solid #c9c9d5;background:#d9d9e2}.searchIpt input:nth-of-type(2){float:right;width:58px;height:36px;border:1px solid #fd635e;background:#fd635e}.searchIpt span{position:absolute;top:12px;left:15px;width:23px;height:23px;background:url(images/select_search.png) no-repeat}.searchIpt input:nth-of-type(1):focus{background:#fff;border-color:#fd635e}.list{margin-top:9px}.list li{margin:3px 0;color:#333;line-height:30px;padding-left:16px;width:270px;box-sizing:border-box;border-radius:14px}.list li.active,.list li:hover{color:#fff;background:#fd635e;cursor:pointer}

用到的知识点总结:

组件是可复用的 Vue 实例,所以它们与 new Vue 接收相同的选项,例如 data、computed、watch、methods 以及生命周期钩子等。仅有的例外是像 el 这样根实例特有的选项。

使用组件:先要注册组件

一、注册组件:分为全局注册和局部注册

全局注册:

•可以在任何模板中使用,使用之前要先注册

语法:使用Vue.component(组件名,选项对象)
组件名命名约定:

•驼峰:(camelCase)、烤串(kebab-case)

在html中使用组件:

•使用烤串(keba-case)命名法

注意:即便我们的组件名是驼峰的形式,在html中也要使用的烤串命名法,不要使用驼峰方式,否则会报错

局部注册:

在组件实例中通过选项对象注册,只在所注册的作用域中使用

{
    components:{
        组件名:选项对象
    }
 }

二、组件中data必须是函数

每个组件都是相互独立的,如果它们公用一个对象,在更改一个组件数据的时候,会影响其他组件。如果是函数的哈,每个组件都有自己独立的数据。相互之间不会影响

data: function () {
 return {
  count: 0
 }
}

三、组件间通信

父组件要给子组件传递数据,子组件需要将它内部发生大的事情告知给父组件

•父组件->子组件

组件实例的作用域是孤立的,不能在子组件直接用父组件的数据
可以在组件上使用自定义属性绑定数据,在组件中需要显式的用props声明自定义属性名

•子组件->父组件

需要用到自定义事件,父组件用$on监听自定义事件,$emit触发父组件所关心的自定义事件

针对这一节的学习,如果您理解的不是特别的好,推荐看官网Vue.js

总结

以上所述是小编给大家介绍的Vue实现自定义下拉菜单功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
ie 调试javascript的工具
Apr 29 Javascript
JQuery扩展插件Validate 3通过参数设置错误信息
Sep 05 Javascript
js中传递特殊字符(+,&amp;)的方法
Jan 16 Javascript
jQuery实现table隔行换色和鼠标经过变色的两种方法
Jun 15 Javascript
Angular ng-repeat 对象和数组遍历实例
Sep 14 Javascript
jquery 获取索引值在一定范围的列表方法
Jan 25 jQuery
读懂CommonJS的模块加载
Apr 19 Javascript
ES6 Array常用扩展的应用实例分析
Jun 26 Javascript
Vue的自定义组件不能使用click方法的解决
Jul 28 Javascript
JS数据类型分类及常用判断方法
Nov 19 Javascript
JS Object构造函数之Object.freeze
Apr 28 Javascript
vue中利用mqtt服务端实现即时通讯的步骤记录
Jul 01 Vue.js
vue实现城市列表选择功能
Jul 16 #Javascript
JavaScript字符串转数字的5种方法及遇到的坑
Jul 16 #Javascript
Angular-UI Bootstrap组件实现警报功能
Jul 16 #Javascript
JS在if中的强制类型转换方式
Jul 15 #Javascript
微信小程序form表单组件示例代码
Jul 15 #Javascript
微信小程序仿朋友圈发布动态功能
Jul 15 #Javascript
Bootstrap Table中的多选框删除功能
Jul 15 #Javascript
You might like
PHP环境搭建最新方法
2006/09/05 PHP
php生成QRcode实例
2014/09/22 PHP
php实现的Curl封装类Curl.class.php用法实例分析
2015/09/25 PHP
详解Laravel服务容器的绑定与解析
2019/11/05 PHP
jQuery Tools tooltip使用说明
2012/07/14 Javascript
JavaScript Promise启示录
2014/08/12 Javascript
JQuery分屏指示器图片轮换效果实例
2015/05/21 Javascript
jQuery版本升级踩坑大全
2016/01/12 Javascript
jQuery实现div横向拖拽排序的简单实例
2016/07/13 Javascript
基于JavaScript实现点击页面任何位置返回
2016/08/31 Javascript
JavaScript SHA-256加密算法详细代码
2016/10/06 Javascript
JavaScript 最佳实践:帮你提升代码质量
2016/12/03 Javascript
jQuery实现鼠标跟随效果
2017/02/20 Javascript
Vue.js之slot深度复制详解
2017/03/10 Javascript
angular.js指令中的controller、compile与link函数的不同之处
2017/05/10 Javascript
Angular.JS中的this指向详解
2017/05/17 Javascript
angular select 默认值设置方法
2017/06/23 Javascript
vue使用element-ui的el-input监听不了回车事件的解决方法
2018/01/12 Javascript
Vue实现boradcast和dispatch的示例
2020/11/13 Javascript
代码分析Python地图坐标转换
2018/02/08 Python
Python嵌套列表转一维的方法(压平嵌套列表)
2018/07/03 Python
python实现linux下抓包并存库功能
2018/07/18 Python
IronPython连接MySQL的方法步骤
2019/12/27 Python
将tensorflow.Variable中的某些元素取出组成一个新的矩阵示例
2020/01/04 Python
tensorflow查看ckpt各节点名称实例
2020/01/21 Python
5分钟实现Canvas鼠标跟随动画背景
2019/11/18 HTML / CSS
纽约州一群才华横溢的金匠制作而成:Hearth Jewelry
2019/03/22 全球购物
全球性的在线鞋类品牌:Public Desire
2019/04/03 全球购物
JAVA软件工程师测试题
2014/07/25 面试题
优秀班干部事迹材料
2014/01/26 职场文书
三方协议书范本
2014/04/22 职场文书
2015年度党员个人总结
2015/02/14 职场文书
员工自我评价范文
2015/03/11 职场文书
同意报考证明
2015/06/17 职场文书
用Python selenium实现淘宝抢单机器人
2021/06/18 Python
关于对TypeScript泛型参数的默认值理解
2022/07/15 Javascript