Element——el-input自动聚焦

问题描述

开发过程中有如下用户体验优化需求:

  • 可编辑文本最开始以文本形式展示
  • 点击文本后切换输入控件
  • 输入控件显示后自动聚焦,开始输入
  • 输入完成,输入控件失去焦点时自动隐藏并切换回文本显示

遇到的坑

思路就是通过点击事件进行显隐的切换,并是输入框获取焦点。于是有如下代码:

<template>
	<div @dblclick="ondbclick">
		<div v-show="!isEdit"></div>
		<div v-show="isEdit">
			<el-input ref="editTask"></el-input>
		</div>
	<div>
</template>

<script>
    export default {
        name: "",
        data() {
            return {
                isEdit: false
            }
        },
		methods: {
            ondbclick() {
            // 想在input出现的时候把focus到input上
                this.isEdit = true;
                this.$refs.editTask.onfocus();	// 使输入框聚焦
            },
        }
    }
</script>

问题现象

如上代码运行后发现,并没有预期的输入框自动聚焦效果。

问题原因

原因在于data中的数据发生变化后,vue的依赖监听并更新视图过程是异步进行的,所以此时视图更新任务还在等待,输入框并没有渲染出来,此时通过$refs操作dom是无效的。

解决方法

Vue.nextTick(callback)
在这里插入图片描述

于是对代码中的 this.$refs.editTask.onfocus()外层做nextTick嵌套就可解决。

this.$nextTick(() => this.$refs.editTask.focus());
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值