好家伙,

我们又又又来了一个客户

用户说:

我想我的页面上有一个搜索框,

当我不需要他的时候,它就是一个按钮

当我想要搜索的时候,我就点一下它,

然后按钮消失,搜索框出现,

当我在浏览其他东西时,这个搜索框会自己变回一个按钮

1.按需展示的文本框和按钮

来做一个按需展示的按钮和文本框

上代码:

<template>
<div id="app">
<input type="text" v-if="inputvalue" @blur="showButton">
//@blur 当失去焦点的时候触发showButton事件
//失去焦点:你点了文本框以外的区域时,焦点不再在文本框上
<button v-else @click="showInput">展示输入框</button>
</div>
</template> <script>
import HelloWorld from './components/HelloWorld.vue' export default {
name: 'App',
data(){
return{
inputvalue:false
}
},
components: {
HelloWorld
},
methods:{
showInput(){
this.inputvalue=true;
},
showButton(){
this.inputvalue=false;
}
}
}
</script>

效果如下:

用户看了直摇头

2.优化

现在用户说:

为什么我点了按钮,

输入框出现了,

我还要再次点一下输入框,才能开始输入?

于是我们又来解决需求了

来稍作修改:

来为文本框绑定一个ref属性:

<input type="text" v-if="inputvalue" @blur="showButton" ref="inputRef"> 

添加一个focus方法:

methods:{
showInput(){
//1.调用方法改inputvalue的值
this.inputvalue=true;
//2.让展示出来的文本框,自动获得焦点
this.$refs.inputRef.focus()
},
showButton(){
this.inputvalue=false;
}

于是,不出意外地话,总是要出点意外的,

来看看生命周期的这张图:

发现问题了

showInput(){
//1.调用方法改inputvalue的值
this.inputvalue=true;
//2.让展示出来的文本框,自动获得焦点
this.$refs.inputRef.focus()
},

js是线性执行的,

数据被更改后,就直接操作页面的dom元素了,

但此时的页面并未渲染完毕

于是就报错了

那么,我们寻找另一个解决方法:

3.$nextTick(cb)方法

延迟到dom渲染完毕再调用其中的cd方法:

组件的$nextTick(cb)方法,会把cb回调推迟到下一个DOM更新周期之后执行。

通俗的理解是:等组件的DOM更新完成之后,再执行cb回调函数。

从而能保证cb回调函数可以操作到最新的DOM元素。

showInput(){
//1.调用方法改inputvalue的值
this.inputvalue=true;
//2.让展示出来的文本框,自动获得焦点
this.$nextTick(()=>{
this.$refs.inputRef.focus()
}) },

解决问题了,

客户看了直点头

That's all

第七十八篇:写一个按需展示的文本框和按钮(使用ref)的更多相关文章

  1. 第二十八篇 -- 写一个简陋的WIFI服务器界面

    效果图: Dlg.cpp // WIFIWMITestDlg.cpp : implementation file // #include "stdafx.h" #include & ...

  2. Python之路【第十八篇】:Web框架们

    Python之路[第十八篇]:Web框架们   Python的WEB框架 Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Pytho ...

  3. Egret入门学习日记 --- 第十八篇(书中 8.5~8.7 节 内容)

    第十八篇(书中 8.5~8.7 节 内容) 其实语法篇,我感觉没必要写录入到日记里. 我也犹豫了好久,到底要不要录入. 这样,我先读一遍语法篇的所有内容,我觉得值得留下的,我就录入日记里. 不然像昨天 ...

  4. 孤荷凌寒自学python第七十九天开始写Python的第一个爬虫9并使用pydocx模块将结果写入word文档

    孤荷凌寒自学python第七十九天开始写Python的第一个爬虫9 (完整学习过程屏幕记录视频地址在文末) 今天在上一天的基础上继续完成对我的第一个代码程序的书写. 到今天终于完成了对docx模块针对 ...

  5. 孤荷凌寒自学python第七十六天开始写Python的第一个爬虫6

    孤荷凌寒自学python第七十六天开始写Python的第一个爬虫6 (完整学习过程屏幕记录视频地址在文末) 今天在上一天的基础上继续完成对我的第一个代码程序的书写. 不过由于对python-docx模 ...

  6. (七十八)使用第三方框架INTULocationManager实现定位

    前面(第七十五.七十六篇)讲述了如何通过CoreLocation获取位置,授权.获取等相当复杂,如果借助于第三方框架,可以简单的实现授权与定位. 首先在GitHub中搜索LocationManager ...

  7. 五、React事件方法(自写一个方法(函数),然后用按钮onClick触发它、自写方法改变this指向3种写法、

    上接:https://www.cnblogs.com/chenxi188/p/11782349.html 项目目录: my-app/ README.md node_modules/ package.j ...

  8. GridView实现一个图片加多个文本框

    GridView的使用是很简单的,API Demo中有例子,但是要实现复杂的GridView,就需要自定义了. 今天我们要实现如下的效果: 先说它的布局,它是由gridview和grid_item两部 ...

  9. Unity3D研究院之Jenkins的使用(七十八)

    长夜漫漫无心睡眠,来一篇嘿嘿.我相信如果已经用Shell脚本完成IOS和Android打包的朋友一定需要Jenkins 怎么才能让策划打包ipa和apk?怎么才能彻底省去程序的时间,只要在同一局域网内 ...

随机推荐

  1. 打字速度单位WPM、KPM定义与计算方法

    国际通行的打字速度单位是WPM,用来量度打字速度的快慢.另外还有相关的KPM.CPM.KPH等打字速度单位,下面一一介绍. ----WPM------------------------------- ...

  2. VR技术赋能五大领域,不止高级,更高效!

    除了VR游戏.VR影视作品,究竟还有哪些产业领域会应用到VR技术并为生活带来改变呢?今天就帮大家好好梳理一下~ VR赋能交通,不只是高级 最近在网上看到了VR考驾照的新闻,网友都赞叹,现在学车都这么高 ...

  3. BUUCTF-假如给我三天光明

    假如给我三天光明 打开压缩包可以看到一个海报,下方有盲文显示,通过对照表得知 盲文翻译为kmdonowg 通过盲文翻译得到的字符串解压压缩包得到一个音频文件 使用Audacity打开,看样子应该是摩斯 ...

  4. 实现领域驱动设计 - 使用ABP框架 - 解决方案概览

    .NET解决方案的分层 下图显示了使用ABP的 应用启动模板 创建的Visual Studio解决方案: 解决方案名称为问题跟踪,它由多个项目组成.通过考虑DDD原则以及开发和部署实践,该解决方案是分 ...

  5. 重学ES系列之模版字符串

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. 排名前三——python 开源 IDE

    写在前面的一些P话: Python无处不在 ,似乎它支持从主要网站到桌面实用程序到企业软件的所有功能. Python已经被用来编写流行的软件项目,如dnf / yum,OpenStack,OpenSh ...

  7. Windows 启动过程

    引言 启动过程是我们了解操作系统的第一个环节.了解 Windows 的启动过程,可以帮助我们解决一些启动的问题,也能帮助我们了解 Windows 的整体结构. 以下内容将分为[加载内核].[内核初始化 ...

  8. 【填坑】树莓派4B上运行Bullseye版本系统,不能登录xrdp的问题~~

    以前使用 buster,安装xrdp后 pi用户xrdp登录正常, 可自从使用了 bullseye系统,pi登录xrdp后,出现黑屏不能登录现象. 网上搜寻解决方案,一种方法是: 登录树莓派后,打开这 ...

  9. Python 封装SNMP调用接口

    PySNMP 是一个纯粹用Python实现的SNMP,用PySNMP的最抽象的API为One-line Applications,其中有两类API:同步的和非同步的,都在模块pysnmp.entity ...

  10. DTS搭载全新自研内核,突破两地三中心架构的关键技术|腾讯云数据库

    随着企业规模的扩大,对数据库可用性要求越来越高,更多企业采用两地三中心.异地多活的架构,以提高数据库的异常事件应对能力. 在数据库领域,我们常听的"两地三中心"."异地多 ...