好家伙,

我们又又又来了一个客户

用户说:

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

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

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

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

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

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. 4.怎么理解相互独立事件?真的是没有任何关系的事件吗? 《zobol的考研概率论教程》

    1.从条件概率的定义来看独立事件的定义 2.从古典概率的定义来看独立事件的定义 3.P(A|B)和P(A)的关系是什么? 4.由P(AB)=P(A)P(B)推出"独立" 5.从韦恩 ...

  2. WPF中Popup控件的使用

    一.Popup控件的主要属性 Popup表示具有内容的弹出窗口,其主要属性为: Child:获取或设置 Popup控件的内容. IsOpen:获取或设置一个值,该值指示Popup 是否可见 Place ...

  3. 密码学系列之:PKI的证书格式表示X.509

    目录 简介 一个证书的例子 X.509证书的后缀 .pem .cer, .crt, .der .p7b, .p7c .p12 .pfx 证书的层级结构和交叉认证 x.509证书的使用范围 总结 简介 ...

  4. java程序使用ssl证书连接mysql

    1. 在mysql服务器上生成证书 openssl genrsa 2048 > ca-key.pem openssl req -new -x509 -nodes -days 3600 -key ...

  5. NC24724 [USACO 2010 Feb S]Chocolate Eating

    NC24724 [USACO 2010 Feb S]Chocolate Eating 题目 题目描述 Bessie has received \(N (1 <= N <= 50,000)\ ...

  6. ​​​​​​​ARCGIS API for Python进行城市区域提取

    ​ArcGIS API for Python主要用于Web端的扩展和开发,提供简单易用.功能强大的Python库,以及大数据分析能力,可轻松实现实时数据.栅格数据.空间数据等多源数据的接入和GIS分析 ...

  7. 面试突击68:为什么 TCP 需要 3 次握手?

    TCP 三次握手是一道经典的面试题,它是指 TCP 在传递数据之前,需要进行 3 次交互才能正式建立起连接,并进行数据传递. TCP 之所以需要 3 次握手是因为 TCP 双方都是全双工的.所谓全双工 ...

  8. nginx+redis+tomcat session绑定

    需求: 公司后端两台tomcat做负载,前端nginx接收用户请求:为了使无论用户请求到后端哪台设备其session都能保持一致,需要做session绑定:所需软件: tomcat8.redis.ng ...

  9. Modbus转BACnet IP网关

    BACnet是楼宇自动化和控制网络数据通信协议的缩写.它是为楼宇自动化网络开发的数据通信协议   根据1999年底互联网上楼宇自动化网络的信息,全球已有数百家国际知名制造商支持BACnet,包括楼宇自 ...

  10. linux rz上传失败

    最近rz上传文件时出现了一次文件上传失败的情况,故搜集了以下资料加强学习 rz -ary --o-sync -a 表示使用ascii码格式传输文件,如果是Dos格式的文件,会转换为unix格式 -r ...