Vue后台管理系统项目(20)表单元素自动聚焦的实现

目录

gitee仓库地址:

业务需求:

1.找到对应的结构

2.给span绑定点击事件

3.$nextTick节点渲染完毕执行获取input节点

问题出现:


gitee仓库地址:

https://gitee.com/CMD-UROOT/my_project/commits/master

大家根据上传历史进行查找你需要的代码

业务需求:

我们需要实现鼠标点击span后,里面的表单input后面有鼠标聚焦,光标不停闪烁的效果,而我们目前的效果是点击span后,还要在点击input表单,才能实现,做这个业务可以提升用户体验 

思路:我们点击span的时候,我们需要获取到input相应的节点进行聚焦

在views/product/Attr/index.vue中:

1.找到对应的结构

2.给span绑定点击事件

我们点击span的时候,我们需要获取到input相应的节点进行聚焦

那么我们怎么获取到input相应的节点呢,我们可以利用ref来获取,相当于给每一个el-input打了一个ref

因为input里面可不止一个属性值,那么我们怎么区分他们呢,我们利用:ref="$index"来区分$index来作为ref属性值,就可以区分了

 methods中:

 打印:

3.$nextTick节点渲染完毕执行获取input节点

 为什么是undefined,因为没有获取到input节点,我们点击span的时候,一瞬间才有input,input才刚刚出现,我们这里没那么快能获取到input节点;并且我们这里切换是span和input之间进行切换的用的v-if,会实现元素的上树与下树,什么是上树与下树,说直白点就是在DOM节点树上有还是没有

当我们点击span的时候,整个页面的结构发生了变化,重绘重排,浏览器都是要重新渲染的,渲染也是耗时间的,所以我们不可能一点击sapn,立马就能获取到input节点

其实上树就是上DOM树 你在JS中创建的节点并不会直接出现在html中

那应该怎么办呢,我们可以利用$nextTick来解决,他是当节点渲染完毕了,会执行一次

methods中这样写:

//点击span的回调,变为编辑模式
      toEdit(row,index){
        row.flag = true
        //获取input节点,实现自动聚焦
        //需要注意:点击span的时候,切换为input变为编辑模式,但是需要注意,对于浏览器而言,页面重绘与重拍耗时间的
        //点击span的时候,重绘重拍一个input它是需要耗费事件,因此我们不可能一点击span立马获取到input
        //console.log(this.$refs[index])//这里不能用.index,因为index是一个变量,这里用中括号枚举的形式
        //$nextTick,当节点渲染完毕了,会执行一次
        this.$nextTick(()=>{
          //获取相应的input表单元素实现聚焦
          this.$refs[index].focus()
        })
      }

效果实现:

问题出现:

我们想要点击添加属性值按钮的时候,新增的input也自动聚焦 

我们看看数据分析一手:

当我们点击添加属性值按钮的时候,自动聚焦,新增的属性值一定是作为数组的最后一项,索引值是可以拿到的,数组的length-1,就拿到他的索引值了

 我们找到添加属性值的回调函数

点击添加属性值按钮的时候,数组的末尾新增一个元素,也要聚焦

 效果实现:

猜你喜欢

转载自blog.csdn.net/qq_46368050/article/details/125090314