实现效果如下:
通过 v-if
的 boolean
值来动态变化是否显示文本框还是 button
按钮。通过 v-model
双向绑定来实现文本框内容的监听。
由于每一行需要设置文本框的显示与隐藏,而且数据是共享的。我们需要通过 scope
来获取每一行的值来进行绑定,不然的话,就会导致某个文本框显示了,其它文本框也跟着显示,并且数据是共用的,都会同步变化。而设置 scope
后,我们就能实现对一行数据进行更新渲染了。
为了实现当我们点击按钮后,让本文看自动获取焦点。
通过 this.$refs.saveTagInput.$refs.input.focus()
来获取 input
的 dom
对象,接着调用 focus
函数来获取焦点。
$nextTick
作用是当页面元素被重新渲染之后才会执行回调函数中的代码。如果不这样做的话,我们直接通过点击按钮的形式,将该行的 inputVisible
设置为了 true
,那么此时直接调用 this.$refs.saveTagInput.$refs.input.focus()
是没办法获取焦点的,此时就会报错。因为我们的 dom
节点还没有进行渲染,而先调用 $nextTick
就是为了等待 dom
节点渲染之后,我们再获取 input
,然后再调用 focus
函数来获取焦点。