📜  按下输入时的 Vuejs v-model - Javascript (1)

📅  最后修改于: 2023-12-03 15:39:47.961000             🧑  作者: Mango

Vue.js 的 v-model 双向绑定

Vue.js 是一种流行的 JavaScript 框架,它提供了一种方便的双向绑定机制,可以自动将视图层的变更同步到数据层,并反之亦然。在 Vue.js 中,v-model 指令用于实现表单元素与组件实例之间的双向数据绑定,是一个简化了表单处理的重要特性。

在表单元素中使用 v-model

在 HTML 表单元素中,我们通常使用 v-model 指令来绑定数据。例如,通过以下方式将 input 元素与 data 中的 message 属性双向绑定:

<div id="app">
  <input v-model="message">
  <p>{{ message }}</p>
</div>

我们创建一个 Vue 实例来管理这个元素以及双向数据绑定的 message 属性:

var app = new Vue({
  el: '#app',
  data: {
    message: 'Hello Vue!'
  }
});

当用户输入文本时,input 元素的值会随之改变,并自动同步到 Vue 实例的 message 属性。反过来,当我们使用 Vue 实例的 message 属性更新数据时,视图也会相应地更新。

在组件中使用 v-model

除了表单元素外,Vue.js 还支持在组件中使用 v-model。v-model 不仅在 input、textarea、select 等表单元素中起作用,也可以在自定义组件中实现双向数据绑定。

例如,我们可以编写一个名为 TodoInput 的组件,在其中使用 v-model 指令将用户输入的待办事项绑定到组件实例的 message 属性:

<template>
  <input v-model="message" placeholder="请输入待办事项">
</template>

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

使用该组件时,我们可以在父组件中使用 v-model 指令将数据传递到子组件,并在父组件中实现对该数据的监听:

<template>
  <div>
    <TodoInput v-model="todo"/>
    <p>{{ todo }}</p>
  </div>
</template>

<script>
import TodoInput from './TodoInput.vue';

export default {
  components: {
    TodoInput
  },
  data() {
    return {
      todo: ''
    };
  },
  watch: {
    todo(newVal, oldVal) {
      console.log(`todo has changed from ${ oldVal } to ${ newVal }`);
    }
  }
};
</script>

在这个例子中,我们将数据 todo 传递到 TodoInput 组件中,以及在父组件中监听该数据的变化。

支持多个参数的 v-model

在某些情况下,我们可能需要使用多个参数来实现更加复杂的数据绑定。在 Vue.js 2.2.0 以后的版本中,我们可以使用 v-model 的 .number 修饰符和 .trim 修饰符来实现数字型和去空格的绑定:

<div id="app">
  <input v-model.number="age" />
  <p>{{ typeof age }} {{ age }}</p>
  <input v-model.trim="name" />
  <p>{{ name }}</p>
</div>

在这个例子中,我们使用 .number 修饰符将 input 的值自动转化为数字,而通过 .trim 修饰符,我们可以去除 input 的前后空格。在实际开发中,我们还可以使用自定义的 v-model 修饰符来实现更加灵活的数据绑定。

总结

在 Vue.js 中,v-model 是一个强大又方便的特性,可以让开发者轻松实现双向数据绑定,进一步简化了表单处理过程。在编写应用程序时,我们应该熟练掌握 v-model 的使用方法,以及在自定义组件中如何使用。