赞
踩
有个业务场景需要需要点击表格单元格变成input编辑,点击其他地方input切换成span。
如图:
未编辑状态使用span显示
编辑状态切换成input
代码
- //html
- template v-slot:value="{row}">
- <el-input v-if="row.isEdit" placeholder="请输入内容" v-model="row.value" ref="Textinp" clearable @blur="preserve(row)"></el-input>
-
- <span v-show="!row.isEdit" class="valueEdit" @click="valueEdit(row)">{{row.value}}
- </span>
- </template>
-
-
- //js
-
- methods:{
- // 值编辑
- valueEdit(row) {
- this.$set(row, "isEdit", true)
- this.$nextTick(() => {
- this.$refs.Textinp.focus();
- })
- },
-
- // 值保存
- preserve(row){
- this.$set(row, "isEdit", false)
- },
在这里就出现了一个问题,那就是切换到input的时候 无法自动获取焦点,无法获取焦点的话就没办法点击其他地方关闭。在百度也找了很多办法,都是无效。最终的解决方案就是在html哪里把v-if改成v-show就解决了这个问题。
修改代码
- <el-input v-show="row.isEdit" placeholder="请输入内容" v-model="row.value" ref="Textinp" clearable @blur="preserve(row)"></el-input>
-
- <span v-show="!row.isEdit" class="valueEdit" @click="valueEdit(row)">{{row.value}}</span>
ps:如果是多个输入框的话,还是v-if和v-else有效。
pps:如果以上全部方法都无效的话可以试试自定义指令
在data同级定义自定义指令
-
- //js
- directives: {
- focus: {
- inserted: function (el) {
- el.querySelector("input").focus()
- }
- }
- },
使用
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。