【IMWeb训练营作业】vue demo Select组件
来源:互联网 发布:老虎机算法作弊器 编辑:程序博客网 时间:2024/05/17 06:19
这是第二次作业,完成select组件
ps:最近这几天在忙着参加创业比赛和广东省大学生职业规划大赛,没时间把做完,终于今天下午可以苟延馋喘下,赶紧把作业补上,毕竟坚持到今天已经是第九天。
学习什么都一样,只要坚持下去总有收获。不说那么多了,直接上效果图
效果
Vue组件
什么是组件?
组件(Component)是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封装可重用的代码。在较高层面上,组件是自定义元素, Vue.js 的编译器为它添加特殊功能。在有些情况下,组件也可以是原生 HTML 元素的形式,以 is 特性扩展。
知识点
(1)全局注册:要注册一个全局组件,你可以使用 Vue.component(tagName, options)
Vue.component("custom-select",{ data:function(){ }, props:["btn","list"], template:`<section class="warp"> </section>`, methods:{ } } })
(a) data 必须是一个函数,防止影响到所有组件。
(b)props:props是专门用来暴露组件的属性接口;组件实例的作用域是孤立的。这意味着不能(也不应该)在子组件的模板内直接引用父组件的数据。要让子组件使用父组件的数据,我们需要通过子组件的props选项。
(c)template:存放组件的HTML结构;并且可直接使用模板字符串“。
(d)methods:子组件触发的事件(父组件在使用子组件的地方用 v-on 来监听)。
(2)HTML元素的扩展:有些元素中不能直接使用自定义标签,可用html元素的is属性来扩展,比如你要在table标签里面存放组件,你可以用<tr is="custom-select"></tr>
(3)组件之间的通信:
父组件传递数据给子组件用的是props,那子组件要改变父组件的状态则用emit events 来进行触发
代码块
Html
<head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <link rel="stylesheet" type="text/css" href="./style.css"> <script src="./vue.js"></script> </head> <body> <div id="app"> <div style="float: left;"> <h2>自定义的下拉框</h2> <custom-select btn="查询" v-bind:list="list1"></custom-select> </div> <div style="float:left;"> <h2>自定义的下拉框2</h2> <custom-select btn="搜索" v-bind:list="list2"></custom-select> </div> </div>
CSS
body{ margin:0; font-family:"微软雅黑";}ul,li{ margin:0; padding:0; list-style:none;}input{ outline:none; cursor: pointer;}.clearFix:after{ display: block; content:''; clear:both;}.warp{ width: 348px; padding:100px 76px 50px; margin:50px; background:no-repeat; background-color: #fd635e; 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;}
js
<script> //注册组件 Vue.component("custom-select",{ data:function(){ return { selectShow:false, val:"" }; }, props:["btn","list"], template:`<section class="warp"> <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: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 of list" @click="selectValueHandle(item)">{{item}}</li> </ul>`, methods:{ selectValueHandle:function(item){ //在子组件中有交互 //告知父级,改变val的值,需要出发一个自定义事件 this.$emit("receive",item); } } }) new Vue({ el:"#app", data:{ list1:["深圳","广州","北京","上海","杭州"], list2:["html","css","js","jq","vue","react"] } }); </script>
- 【IMWeb训练营作业】vue demo Select组件
- 【IMWeb训练营作业】Vue Select Demo
- 【IMWeb训练营作业】vue-select-demo
- 【IMWeb训练营作业】【Vue】Select组件
- [IMWeb训练营作业]基于vue实现的select组件
- IMWeb训练营作业--VUE练习2--select组件
- 【IMWeb训练营作业】实战vue练习之select 组件
- 【IMWeb训练营作业】 vue练习-组件select
- 【IMWeb训练营作业】vue demo Todolist
- 【IMWeb训练营作业】Vue TodoList Demo
- 【IMWeb训练营作业】 Vue2 Select demo
- 【IMWeb训练营作业】Vue组件
- 【IMWeb训练营作业】vue组件
- 【IMWeb训练营作业】select 组件初版
- 【IMWeb训练营作业】select组件
- 【IMWeb训练营作业】Select组件
- IMWeb训练营作业-仿select组件
- 【IMWeb训练营作业】select 组件
- Activity使用详解
- Android RecyclerView23.2.0的一点小变化(RecyclerView中Item占一屏解决方案)
- 扒一扒.net、.net framework、mono和Unity
- android源码树结构介绍
- 十大web前端开发框架
- 【IMWeb训练营作业】vue demo Select组件
- hdu 4143 A Simple Problem(数学)
- 一、activiti环境配置
- C# 文件下载帮助类
- JS动态
- centos系统安装openstack
- [Deep Learning] TensorFlow模型、参数的保存与读取
- C# 文件上传帮助类
- leetcode.70.Climbing Stairs