vue--组件性别选择器和仿百度搜索栏
实现原理
主要参考vue官网上的自定义事件,父组件v-bind给子组件传参数,子组件利用props来接受父组件那边传过来的参数。我们还会遇到一个问题,怎么实时拿到props的值给data里面的值呢?其实很简单,利用watch属性监听props某个值的变化,把新的值给data;
拿值拿到了,就根据业或UI的需求实现页面...
代码写啊写,逻辑走啊走,得到我们最终要的那个值后,怎么把它从子组件里面传出来给父组件呢?其实我们可以利用.sync修饰符对prop进行”双向数据绑定”:子组件emit发射事件,父组件监听这个事件然后更新一个本地数据。
我们推荐以 update:myPropName 的模式触发事件取而代之。举个例子,在一个包含 title prop 的假设的组件中,我们可以用以下方法表达对其赋新值的意图:
this.$emit('update:title', newTitle)
-------------子组件在上面,父组件代码在下,可以参考vue官网------------------------------
<text-document
v-bind:title="doc.title"
v-on:update:title="doc.title = $event"
></text-document>
性别选择器
实现代码
<!--author: StephenWu5 慎用!!!!!性别选择器-->
<template>
<div class="SexSelector">
<div class="male" :class="[this.innerSex == 1? 'active': '']" @click="select1">男</div>
<div class="female" :class="[this.innerSex == 2? 'active': '']" @click="select2">女</div>
</div>
</template>
<script>
export default{
name: 'SexSelector',
props: {
sex: [String, Number],
//sex: {
//type: Number,
//default: 0
//}
},
watch:{
sex: function(newQuestion){ //利用监听属性给data里面innerSex赋值吧。
this.innerSex = newQuestion;
}
},
data: function(){
return{
innerSex: '',
//这里其实可以优化一下
enumsSelect: [{
code: 1,
text: '男'
},{
code: 2,
text: '女'
}], // 下拉选
}
},
methods:{
select1(){
let male = 1;
this.innerSex = male;
console.log(this.innerSex)
this.$emit('update:sex', male);
},
select2(){
let female = 2;
this.innerSex = female;
console.log(this.innerSex)
this.$emit('update:sex', female);
}
},
created(){
}
}
</script>
<style scoped lang='less'>
.SexSelector{
div{
display: inline-block;
width: 70px;
height: 30px;
border: 1px solid #ccc;
line-height: 30px;
text-align: center;
cursor: pointer;
border-radius: 3px;
&.active{
color: #B1CDFF ;
border-color: #B1CDFF;
}
}
}
</style>
使用方法:
<sex-select :sex.sync="obj.sex"></sex-select>
效果如下
仿百度搜索栏
实现代码
<!--author: StephenWu5 慎用!!!!!-->
<template>
<div id="watch-example" class="select2Wrapper" >
<p class='wrapper-item'>
<input v-model="someName" class="form-control" @focus="showList(true)">
</p>
<ul v-show="usersList.length != 0 && showListOrNot" class='wrapper-item'>
<li v-for="(item,index) in usersList" :key="index" @click="selectThisOne($event,item)">{{item.name}}</li>
</ul>
</div>
</template>
<script>
import _ from 'lodash';
export default{
name: 'Select2',
props: {
userName: {
type: String,
default: '',
}
},
data(){
return{
//userName: '',
showListOrNot: false,
someName: this.userName,
usersList: [],
usersListReturn: [ //模拟后台返回的列表数据
{
name: '周星驰',
value: 0,
},
{
name: '周星驰21',
value: 0,
},
{
name: '周星驰',
value: 0,
},
{
name: '周星驰',
value: 0,
},
{
name: '周星驰',
value: 0,
},
{
name: '周星驰',
value: 0,
},
{
name: '周星驰',
value: 0,
},
]
}
},
watch: {
// 如果 `userName` 发生改变,这个函数就会运行 这里主要是运用了vue官网上的侦听器。
someName: function (newuserName, oldQuestion) {
this.debouncedGetusers()
},
userName: function(newVal, oldVal){
this.someName = newVal;
}
},
created: function () {
// `_.debounce` 是一个通过 Lodash 限制操作频率的函数。
this.debouncedGetusers = _.debounce(this.getusers, 500)
},
methods: {
getusers: function () {
if (this.someName === '') {
this.usersList = [];
return
}
var vm = this;
this.usersList = this.usersListReturn;
//这里写ajax请求
},
selectThisOne(event,item){ //如何返回给父组件?
event.preventDefault();
this.showListOrNot = false;
this.someName = item.name;
this.$emit('update:userName', item.name);
},
showList(value){
this.showListOrNot = value;
}
}
}
</script>
<style scoped lang='less'>
.select2Wrapper{
z-index: 999;
position: relative;
p.wrapper-item{
input{
width: 100%;
}
}
ul.wrapper-item{
position: absolute;
z-index: 999;
width: 100%;
background-color: #9DC1FF;
background-color: white;
border: 1px solid #ccc;
li{
z-index: 999;
padding: 0 10px;
&:hover{
background-color: #ccc;
}
}
}
}
</style>
使用方法
<select2 :userName.sync="obj.number" ></select2>
效果图
注意项
修饰符asyc是支持对象,数组等的哈哈。
支持缩写成这个样子,连props的那个都不用写哈,一直错了好久哈。
<text-document v-bind:title.sync="doc.title"></text-document>
最后,欢迎关注我的公众号。

vue--组件性别选择器和仿百度搜索栏的更多相关文章
- js仿百度文库文档上传页面的分类选择器_第二版
仿百度文库文档上传页面的多级联动分类选择器第二版,支持在一个页面同一时候使用多个分类选择器. 此版本号把HTML,CSS,以及图片都封装到"category.js"中.解决因文件路 ...
- vue-resource使用 (vue仿百度搜索)
1.this.$http.get()方法2.this.$http.post()方法3.this.$http.jsonp()方法 (vue仿百度搜索) 在输入框中输入a, 然后在百度f12 ==> ...
- 009——VUE中watch监听属性变化实现类百度搜索栏功能
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Springboot+Vue实现仿百度搜索自动提示框匹配查询功能
案例功能效果图 前端初始页面 输入搜索信息页面 点击查询结果页面 环境介绍 前端:vue 后端:springboot jdk:1.8及以上 数据库:mysql 核心代码介绍 TypeCtrler .j ...
- 仿ElementUI构建自己的Vue组件库用babel-plugin-component按需加载组件及自定义SASS主题
最近使用ElementUI做项目的时候用Babel的插件babel-plugin-component做按需加载,使得组件打包的JS和CSS包体积大大缩小,加载速度也大大提升,所有想模仿做一个组件库也来 ...
- VUE组件汇总
内容 UI组件 开发框架 实用库 服务端 辅助工具 应用实例 Demo示例 UI组件 element ★13489 - 饿了么出品的Vue2的web UI工具套件 Vux ★8133 - 基于Vue和 ...
- Vue基础语法(样式绑定,事件处理,表单,Vue组件)
样式绑定 事件处理 表单 Vue组件 样式绑定 <!DOCTYPE html> <html> <head> <meta charset="utf-8 ...
- 基于vue的颜色选择器color-picker
项目中有用到颜色选择器的童鞋们可以看过来了 关于color-picker的jquery的插件是有蛮多,不过vue组件没有吧,反正我没有找到, 虽然element-ui里面有这个,但是你愿意为了一个小功 ...
- 如何在vue单页应用中使用百度地图
作为一名开发人员,每次接到开发任务,我们首先应该先分析需求,然后再思考技术方案和解决方案.三思而后行,这是一个好的习惯. 需求:本项目是采用vue组件化开发的单页应用项目,现需要在项目中引入百度的地图 ...
随机推荐
- 图像处理中的跨度(stride)
原文:图像处理中的跨度(stride) 使用C#的BitmapData 最近要转开发平台,正研究C#.C#好是好,不过处理图片时一个像素一个像素的操作像素不是一般的慢.其实Delphi也一样,但好在D ...
- 分配粒度和内存页面大小(x86处理器平台的分配粒度是64K,内存页是4K,所以section都是0x1000对齐,硬盘扇区大小是512字节,所以PE文件默认文件对齐是0x200)
分配粒度和内存页面大小 x86处理器平台的分配粒度是64K,32位CPU的内存页面大小是4K,64位是8K,保留内存地址空间总是要和分配粒度对齐.一个分配粒度里包含16个内存页面. 这是个概念,具体不 ...
- memcached对中文key的支持问题
默认的memcached客户端对非ANSI的key存取时会有问题,有2种方式解决: 1 在get和set前将缓存的key进行UrlEncode 2 修改memcached.config文件 <e ...
- Android零基础入门第64节:揭开RecyclerView庐山真面目
原文:Android零基础入门第64节:揭开RecyclerView庐山真面目 大家还记得之前在第38期~第50期都在学习列表控件吗,其中用了8期讲ListView的使用,相信都已经掌握好了吧.那么本 ...
- 为DataGridTemplateColumn设置快捷菜单
<DataGrid.ContextMenu> <ContextMenu> <MenuItem Command="{x:Static ApplicationCom ...
- 国家气象局 天气预报 城市代码(JSON格式)
如题 { "城市代码": [ { "省": "北京", "市": [ { "市名": "北 ...
- 浅议Delphi中的Windows API调用(举的两个例子分别是String和API,都不错,挺具有代表性)
浅议Delphi中的Windows API调用http://tech.163.com/school • 2005-08-15 10:57:41 • 来源: 天极网为了能在Windows下快速开发应用程 ...
- 用C实现OOP面向对象编程(1)
如摘要所说,C语言不支持OOP(面向对象的编程).并这不意味着我们就不能对C进行面向对象的开发,只是过程要复杂许多.原来以C++的许多工作,在C语言中需我们手动去完成. 博主将与大家一起研究一下如下用 ...
- excel导入到数据库的异常处理
excel导入到数据库,这个是经常发生的,今天就碰到了一个非常郁闷的事情,在导入到oracle数据的时候,总是出现ORA-01756: 引号内的字符串没有正确结束,认真的排插了数据当中可能出现的错误, ...
- 层次关系表格,不用递归,快速检索。HierarchyId
最近这几天写了个T4自动实现EF code first和Ado的存储过程.使用过程中发现了一个Sql的类型为HierarchyId.看到时真是百思不得齐姐.算了查一下MSDN吧.从微软官网找到了Hie ...