当前位置:首页 > VUE

vue get set 实现

2026-01-17 02:12:17VUE

Vue 中实现 getter 和 setter 的方法

在 Vue 中,可以通过计算属性(computed properties)或 Object.defineProperty 实现 getter 和 setter。

使用计算属性实现

计算属性默认只有 getter,但可以通过定义 setter 实现双向绑定。

new Vue({
  data() {
    return {
      firstName: 'John',
      lastName: 'Doe'
    }
  },
  computed: {
    fullName: {
      get() {
        return `${this.firstName} ${this.lastName}`
      },
      set(newValue) {
        const names = newValue.split(' ')
        this.firstName = names[0]
        this.lastName = names[1] || ''
      }
    }
  }
})

使用 Object.defineProperty 实现

可以直接在数据对象上定义 getter 和 setter。

new Vue({
  data() {
    const data = {
      _message: 'Hello'
    }
    Object.defineProperty(data, 'message', {
      get() {
        return this._message
      },
      set(newValue) {
        this._message = newValue
        console.log('Message changed to:', newValue)
      }
    })
    return data
  }
})

在 Vue 3 中使用 refreactive

Vue 3 的 Composition API 提供了更灵活的方式。

vue get set 实现

import { ref, computed } from 'vue'

export default {
  setup() {
    const count = ref(0)
    const doubleCount = computed({
      get: () => count.value * 2,
      set: (val) => {
        count.value = val / 2
      }
    })
    return { count, doubleCount }
  }
}

这些方法都能在 Vue 中实现 getter 和 setter 功能,根据具体场景选择合适的方式。

标签: vueget
分享给朋友:

相关文章

vue实现字母添加排序

vue实现字母添加排序

实现字母添加排序的方法 在Vue中实现字母添加排序功能,可以通过以下步骤完成: 创建Vue实例并定义数据 new Vue({ el: '#app', data: { letters…

vue插槽实现

vue插槽实现

插槽的基本概念 Vue插槽(Slot)是一种内容分发机制,允许父组件向子组件传递模板片段,子组件通过<slot>标签定义接收位置。插槽的核心作用是增强组件的灵活性和复用性。 默认插槽 子…

vue拖拽实现

vue拖拽实现

Vue 拖拽实现方法 使用 HTML5 原生拖拽 API HTML5 提供了原生拖拽 API,可以通过 draggable 属性、dragstart、dragend、dragover 和 drop 事…

vue实现弹幕

vue实现弹幕

Vue 实现弹幕功能 弹幕功能通常包括动态生成、滚动显示、颜色和速度随机化等特性。以下是基于 Vue 3 的实现方法。 核心思路 使用 CSS 动画控制弹幕从右向左滚动。 动态生成弹幕数据,随机设置…

vue实现分栏

vue实现分栏

Vue实现分栏的常见方法 使用CSS Flexbox布局 通过Flexbox可以快速实现分栏效果,适合大多数响应式布局场景 <template> <div class="con…

vue 实现拖拉

vue 实现拖拉

Vue 实现拖拽功能的方法 使用 HTML5 原生拖放 API HTML5 提供了原生的拖放 API,可以通过 draggable 属性、dragstart、dragend、dragover 和 dr…