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组件化开发的单页应用项目,现需要在项目中引入百度的地图 ...
随机推荐
- HTML5离线缓存攻击测试
本实验采用局域网模拟,通过修改本地HOSTS文件来模拟域名以及DNS欺骗.合法网站使用Linux CentOS7的apache服务器搭建,IP为192.168.1.113,HOSTS文件中加入192. ...
- 2018-4-25-- 2.在sublime3里安装git插件并连接GitHub
1.配置全局参数 Git的主要配置包括用户名.邮箱的设置.以及生成SSH密钥公钥等. 首先运行一下的命令设置git提交代码时自己的用户信息. 2.在sublime3里使用时需要配置push.defau ...
- Win10《芒果TV》更新v3.5.0夏至版:会员尊享蓝光画质,关联本地视频播放
在Win10秋季创意者更新前夕,Win10版<芒果TV>全平台同步更新夏至版v3.5.0,新增会员蓝光画质,关联本地视频播放,进一步提升使用体验. Win10版<芒果TV>V3 ...
- 什么是OTC?
OTC(Over The Counter)非处方药物,我国卫生部医政司是这样定义的:它是消费者可不经过医生处方,直接从药房或药店购买的药品,而且是不在医疗专业人员指导下就能安全使用的药品,即不需要凭借 ...
- Portal for ArcGIS 资源承载数据类型
在Portal中数据主要分为两大类:Web内容与桌面内容.对于Web内容与桌面内容中的每个项目(item)又被具体分为maps,layers, styles, tools,applications,和 ...
- UWP入门(十一)--使用选取器打开文件和文件夹
原文:UWP入门(十一)--使用选取器打开文件和文件夹 很漂亮的功能,很有趣 重要的 API FileOpenPicker FolderPicker StorageFile 通过让用户与选取器交互来访 ...
- C#实现bitmap图像矫正
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- Qt 设置背景图片3种方法(三种方法:QPalette调色板,paintEvent,QSS)
方法1. setStylSheet{"QDialog{background-image:url()"}} //使用styleSheet 这种方法的好处是继承它的dialog都会自 ...
- Matlab与.Net混合编程-多维数组赋值出错的问题
问题描述:Matlab可编译供.net调用的dll.两种不同环境对数据类型的定义相差较大,因此在C#中调用Matlab编译的函数时,首先要将C#中的变量类型转换成与Matlab对应的中转类型.Matl ...
- 转:Mongoose使用操作
一般我们不直接用MongoDB的函数来操作MongoDB数据库 Mongose就是一套操作MongoDB数据库的接口. 连接数据库 // mongoose 链接var mongoose = req ...