当前位置:首页 > 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 属性或富文本编辑器

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

相关文章

vue实现md编辑

vue实现md编辑

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

vue实现简历在线编辑

vue实现简历在线编辑

Vue 实现简历在线编辑方案 核心功能设计 使用 Vue 的响应式特性绑定表单数据,结合富文本编辑器或自定义表单组件实现编辑功能。推荐以下技术组合: 数据管理:Vuex 或 Pinia 存储简历数据…

vue怎样实现编辑功能

vue怎样实现编辑功能

Vue 实现编辑功能的方法 使用双向绑定与表单控件 通过 v-model 绑定表单控件(如 input、textarea)实现数据同步。 示例代码: <template> <i…

vue实现新闻浏览编辑

vue实现新闻浏览编辑

Vue 实现新闻浏览编辑功能 项目结构搭建 使用 Vue CLI 快速初始化项目,安装必要依赖如 vue-router 和 axios。创建以下核心目录: src/views/ 存放新闻列表和编辑页…

vue实现排班可编辑

vue实现排班可编辑

Vue 实现可编辑排班功能 要实现一个可编辑的排班功能,可以结合 Vue 的数据绑定和事件处理机制。以下是一个完整的实现方案: 数据结构设计 使用一个二维数组来表示排班表,每个单元格包含员工信息和班…

vue 实现 代码编辑功能

vue 实现 代码编辑功能

实现代码编辑功能的基本思路 在Vue中实现代码编辑功能通常需要借助第三方库,例如Monaco Editor(VS Code使用的编辑器)或CodeMirror。以下是两种常见方案的实现方法。 使用M…