当前位置:首页 > VUE

vue 实现双击编辑

2026-01-08 14:16:25VUE

vue 实现双击编辑

使用 v-on 监听双击事件

通过 v-on:dblclick@dblclick 监听元素的双击事件,触发编辑状态。在模板中绑定双击事件,并在方法中切换编辑状态。

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

切换编辑状态

在 Vue 组件的 data 中定义 isEditingcontent 变量,并通过方法切换编辑状态。双击时设置为编辑模式,失去焦点或按下回车键时退出编辑模式。

<script>
export default {
  data() {
    return {
      isEditing: false,
      content: '双击编辑内容'
    }
  },
  methods: {
    startEditing() {
      this.isEditing = true
      this.$nextTick(() => {
        this.$refs.input.focus()
      })
    },
    stopEditing() {
      this.isEditing = false
    }
  }
}
</script>

自动聚焦输入框

使用 $nextTick 确保 DOM 更新后聚焦输入框。在 startEditing 方法中调用 this.$refs.input.focus(),确保输入框在编辑模式下自动获得焦点。

支持回车确认

通过 @keyup.enter 监听回车键事件,触发 stopEditing 方法。这样用户可以通过回车键快速确认编辑内容。

样式优化

为编辑状态和非编辑状态添加样式区分,提升用户体验。例如,非编辑状态下显示为普通文本,编辑状态下显示为输入框。

<style>
span {
  padding: 5px;
  cursor: pointer;
}
input {
  padding: 5px;
  border: 1px solid #ccc;
}
</style>

完整示例

将上述代码整合为一个完整的 Vue 组件,实现双击编辑功能。用户双击文本进入编辑模式,编辑完成后通过失去焦点或回车键退出编辑模式。

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

<script>
export default {
  data() {
    return {
      isEditing: false,
      content: '双击编辑内容'
    }
  },
  methods: {
    startEditing() {
      this.isEditing = true
      this.$nextTick(() => {
        this.$refs.input.focus()
      })
    },
    stopEditing() {
      this.isEditing = false
    }
  }
}
</script>

<style>
span {
  padding: 5px;
  cursor: pointer;
}
input {
  padding: 5px;
  border: 1px solid #ccc;
}
</style>

vue 实现双击编辑

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

相关文章

vue  怎么实现双击

vue 怎么实现双击

实现双击事件的方法 在 Vue 中实现双击事件可以通过 @dblclick 指令或自定义逻辑实现。以下是两种常见方法: 使用 @dblclick 指令 Vue 提供了原生 @dblclick 指令…