vue 自定义指令 focus 条件聚焦 时,在与v-if共存时需要处理的问题

在Vue中遇到自定义指令focus用于在isEdit时使input聚焦,但当input通过v-if与isEdit联动显示时,指令无法正常聚焦。解决方案是将v-if替换为class控制显示,利用CSS隐藏与显示input,因为v-if导致视图更新异步,指令已提前执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于vue中,比如下面一段代码, 需要在isEdit的时候,实现input聚焦,
而input出现的时机是 也是isEdit 为真时,

自定义指令也生效了。就是不聚焦。

<ul v-cloak v-if="list">
            <li v-for="it of list">
                <span :id="it.id" @click="edit(it)">{{it.name}}</span>
                <a href="javascript:;" class="close" @click="close(it)">close</a>
                <input type="text"
                       v-model="it.name"
                       v-to-focus="it.isEdit"
                       v-if = "it.isEdit"
                       @blur="blur(it)"
                       @keyup.enter="editsuccess(it)"
                       @keyup.esc="escEvent(it)"
                />
            </li>
        </ul>
directives : {
            "to-focus" : function (el,binding) {
                console.log(binding)
                if(binding.value){
                    el.focus();
                    console.log(el)
                }
            }
        }

具体实施,input取消用v-if控制显示,切换到class上面去 .isEdit input 显示,然后在css中写相应的css,平时隐藏,这样就OK了。

<ul v-cloak v-if="list">
            <li v-for="it of list"
                :class="{isedit:it.isEdit}"
            >
                <span :id="it.id" @click="edit(it)">{{it.name}}</span>
                <a href="javascript:;" class="close" @click="close(it)">close</a>
                <input type="text"
                       v-model="it.name"
                       v-to-focus="it.isEdit"                      
                       @blur="blur(it)"
                       @keyup.enter="editsuccess(it)"
                       @keyup.esc="escEvent(it)"
                />
            </li>
        </ul>

至于原因,尼玛我刚用vue觉得是 v-if 条件显示的时候是异步的改变视图,自定义指令已经执行过了。所以就888了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值