当前位置:首页 > VUE

怎么用vue.js实现双向绑定

2026-01-11 21:22:18VUE

使用 v-model 指令实现双向绑定

Vue.js 提供了 v-model 指令用于在表单输入元素(如 inputtextareaselect)上实现双向数据绑定。v-model 会根据控件类型自动选取正确的方法来更新元素的值。

<template>
  <div>
    <input v-model="message" placeholder="输入内容">
    <p>输入的内容是: {{ message }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: ''
    }
  }
}
</script>

自定义组件实现双向绑定

在自定义组件中实现双向绑定,需要在组件内部使用 model 选项和 $emit 方法。

<template>
  <div>
    <custom-input v-model="message"></custom-input>
    <p>输入的内容是: {{ message }}</p>
  </div>
</template>

<script>
import CustomInput from './CustomInput.vue'

export default {
  components: {
    CustomInput
  },
  data() {
    return {
      message: ''
    }
  }
}
</script>

自定义组件 CustomInput.vue 的实现:

怎么用vue.js实现双向绑定

<template>
  <input
    :value="value"
    @input="$emit('input', $event.target.value)"
  >
</template>

<script>
export default {
  props: ['value']
}
</script>

使用 .sync 修饰符实现双向绑定

对于需要双向绑定的 prop,可以使用 .sync 修饰符。这种方法适用于非表单元素的双向绑定。

<template>
  <div>
    <child-component :title.sync="pageTitle"></child-component>
    <p>当前标题: {{ pageTitle }}</p>
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue'

export default {
  components: {
    ChildComponent
  },
  data() {
    return {
      pageTitle: '初始标题'
    }
  }
}
</script>

子组件 ChildComponent.vue 的实现:

怎么用vue.js实现双向绑定

<template>
  <button @click="updateTitle">更新标题</button>
</template>

<script>
export default {
  props: ['title'],
  methods: {
    updateTitle() {
      this.$emit('update:title', '新标题')
    }
  }
}
</script>

使用计算属性实现复杂双向绑定

对于需要处理复杂逻辑的双向绑定,可以使用计算属性的 getter 和 setter。

<template>
  <div>
    <input v-model="fullName">
    <p>名字: {{ firstName }}</p>
    <p>姓氏: {{ lastName }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      firstName: '张',
      lastName: '三'
    }
  },
  computed: {
    fullName: {
      get() {
        return `${this.firstName} ${this.lastName}`
      },
      set(newValue) {
        const names = newValue.split(' ')
        this.firstName = names[0] || ''
        this.lastName = names[1] || ''
      }
    }
  }
}
</script>

使用 Vue 3 的 v-model 语法

在 Vue 3 中,v-model 语法有所变化,支持多个 v-model 绑定。

<template>
  <user-name
    v-model:first-name="firstName"
    v-model:last-name="lastName"
  ></user-name>
</template>

<script>
import UserName from './UserName.vue'

export default {
  components: {
    UserName
  },
  data() {
    return {
      firstName: '',
      lastName: ''
    }
  }
}
</script>

子组件 UserName.vue 的实现:

<template>
  <div>
    <input
      :value="firstName"
      @input="$emit('update:firstName', $event.target.value)"
    >
    <input
      :value="lastName"
      @input="$emit('update:lastName', $event.target.value)"
    >
  </div>
</template>

<script>
export default {
  props: {
    firstName: String,
    lastName: String
  }
}
</script>

标签: 绑定双向
分享给朋友:

相关文章

vue双向实现数据

vue双向实现数据

Vue 双向数据绑定的实现 Vue 的双向数据绑定主要通过 v-model 指令实现,它结合了 v-bind 和 v-on 的功能,能够同步表单输入和应用状态。 基本语法 在表单元素上使用 v-mo…

vue实现数组绑定

vue实现数组绑定

Vue 数组绑定的实现方法 Vue 提供了多种方式实现数组的响应式绑定,确保数据变化时视图自动更新。以下是常见的实现方法: 使用 v-for 指令渲染数组 通过 v-for 指令可以遍历数组并渲染…

vue 双向实现原理

vue 双向实现原理

Vue 双向绑定的实现原理 Vue 的双向绑定主要通过 v-model 指令实现,其核心是结合数据劫持(Object.defineProperty 或 Proxy)和发布-订阅模式。以下是具体实现机制…

实现vue动态绑定

实现vue动态绑定

动态绑定的基本语法 在Vue中,使用v-bind指令或简写:实现动态绑定,将数据属性与HTML元素的属性关联起来。例如动态绑定class或style: <div v-bind:class="…

vue实现双向滚动

vue实现双向滚动

实现双向滚动的 Vue 方法 双向滚动通常指两个关联的滚动区域(如表格的头部和内容部分)同步滚动。以下是几种实现方式: 使用事件监听和 scroll 方法 通过监听一个滚动区域的 scroll 事…

vue怎样实现数组绑定

vue怎样实现数组绑定

Vue 实现数组绑定的方法 Vue 提供了多种方式来实现数组的绑定,以下是常见的几种方法: 使用 v-for 指令绑定数组 通过 v-for 指令可以遍历数组并渲染列表。语法如下: <u…