实现效果如下:
通过 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 函数来获取焦点。