当前位置:首页 > VUE

vue实现双击编辑

2026-01-16 06:28:19VUE

Vue 实现双击编辑功能

基本实现思路

通过监听元素的 dblclick 事件触发编辑状态,结合 v-ifv-else 切换显示模式。以下是核心实现方案:

<template>
  <div>
    <span v-if="!isEditing" @dblclick="startEditing">{{ content }}</span>
    <input
      v-else
      ref="inputField"
      v-model="editableContent"
      @blur="stopEditing"
      @keyup.enter="stopEditing"
    />
  </div>
</template>

<script>
export default {
  data() {
    return {
      content: '双击编辑这段文字',
      isEditing: false,
      editableContent: ''
    }
  },
  methods: {
    startEditing() {
      this.isEditing = true
      this.editableContent = this.content
      this.$nextTick(() => {
        this.$refs.inputField.focus()
      })
    },
    stopEditing() {
      this.isEditing = false
      this.content = this.editableContent
    }
  }
}
</script>

进阶优化方案

自动选中文本 在获得焦点时自动全选输入框内容:

startEditing() {
  this.isEditing = true
  this.editableContent = this.content
  this.$nextTick(() => {
    const input = this.$refs.inputField
    input.focus()
    input.select()
  })
}

ESC 键取消编辑

<input
  v-else
  @keyup.esc="cancelEditing"
/>
cancelEditing() {
  this.isEditing = false
}

封装为可复用组件

创建 EditableText.vue 组件:

vue实现双击编辑

<template>
  <div class="editable-text">
    <slot v-if="!isEditing" name="display" @dblclick="startEditing">
      <span @dblclick="startEditing">{{ value }}</span>
    </slot>
    <slot v-else name="edit">
      <input
        ref="input"
        v-model="editableValue"
        @blur="handleBlur"
        @keyup.enter="handleBlur"
        @keyup.esc="cancelEdit"
      />
    </slot>
  </div>
</template>

<script>
export default {
  props: {
    value: {
      type: String,
      required: true
    }
  },
  data() {
    return {
      isEditing: false,
      editableValue: this.value
    }
  },
  methods: {
    startEditing() {
      this.isEditing = true
      this.editableValue = this.value
      this.$nextTick(() => {
        this.$refs.input.focus()
      })
    },
    handleBlur() {
      this.$emit('input', this.editableValue)
      this.isEditing = false
    },
    cancelEdit() {
      this.isEditing = false
    }
  }
}
</script>

使用示例

<editable-text v-model="textContent" />

样式优化建议

.editable-text {
  display: inline-block;
}
.editable-text span {
  padding: 2px 5px;
  cursor: text;
}
.editable-text input {
  border: 1px solid #ddd;
  padding: 2px 5px;
}

注意事项

  • 对于表格单元格等场景,可能需要调整事件冒泡
  • 移动端需要额外考虑触摸事件处理
  • 复杂内容编辑可替换为 contenteditable 属性或富文本编辑器

标签: 双击编辑
分享给朋友:

相关文章

elementui编辑

elementui编辑

Element UI 编辑功能实现方法 Element UI 提供了丰富的组件支持数据编辑操作,常见场景包括表格行内编辑、表单编辑、对话框编辑等。 表格行内编辑 使用 el-table 结合 el…

vue实现编辑视频

vue实现编辑视频

Vue 实现视频编辑功能 在 Vue 中实现视频编辑功能通常需要结合 HTML5 的 <video> 元素和第三方库。以下是实现的基本方法和步骤: 安装必要依赖 使用 video.js…

vue实现md编辑

vue实现md编辑

vue实现markdown编辑器 使用Vue实现Markdown编辑器可以借助现成的库或组件,以下是几种常见实现方式: 使用marked和highlight.js库 安装依赖库: npm ins…

vue实现表格可编辑

vue实现表格可编辑

Vue实现表格可编辑的方法 使用v-model绑定数据 通过v-model绑定表格单元格的数据,结合v-if或v-show切换编辑状态。 示例代码: <template> <t…

vue实现页面在线编辑

vue实现页面在线编辑

Vue实现页面在线编辑的方法 Vue.js可以结合多种库和工具实现页面在线编辑功能,以下是几种常见方案: 使用contenteditable属性 在Vue模板中直接使用HTML5的contented…

vue表格实现单行编辑

vue表格实现单行编辑

Vue 表格实现单行编辑的方法 使用 v-if 和 v-else 切换显示模式 在表格的每一行中,可以通过 v-if 和 v-else 切换显示模式和编辑模式。定义一个状态变量(如 editingId…