Vue 表单

Vue 为我们提供了一种简单的方法,通过添加响应式和表单验证等额外功能来改善表单的用户体验。

Vue 在处理表单时使用 v-model 指令。


首次使用 Vue

让我们从一个简单的购物清单实例开始,了解如何在创建表单时使用 Vue。有关 HTML 中的表单以及相关标记和属性的更多信息,学习本站的 HTML表单 教程。

1、添加标准 HTML 表单元素:

  1. <form>
  2. <p>Add item</p>
  3. <p>Item name: <input type="text" required></p>
  4. <p>How many: <input type="number"></p>
  5. <button type="submit">Add item</button>
  6. </form>

2、使用当前商品名称、编号和购物清单创建 Vue 实例,并使用 v-model 将我们的输入连接到它。

  1. <div id="app">
  2. <form>
  3. <p>Add item</p>
  4. <p>Item name: <input type="text" required v-model="itemName"></p>
  5. <p>How many: <input type="number" v-model="itemNumber"></p>
  6. <button type="submit">Add item</button>
  7. </form>
  8. </div>
  9. <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
  10. <script>
  11. const app = Vue.createApp({
  12. data() {
  13. return {
  14. itemName: null,
  15. itemNumber: null,
  16. shoppingList: [
  17. { name: 'Tomatoes', number: 5 }
  18. ]
  19. }
  20. }
  21. })
  22. app.mount('#app')
  23. </script>

3、调用方法将商品添加到购物列表中,并阻止提交时默认的浏览器刷新。

  1. <form v-on:submit.prevent="addItem">

4、创建将商品添加到购物列表并清除表单的方法:

  1. methods: {
  2. addItem() {
  3. let item = {
  4. name: this.itemName,
  5. number: this.itemNumber
  6. }
  7. this.shoppingList.push(item);
  8. this.itemName = null
  9. this.itemNumber = null
  10. }
  11. }

5、使用 v-for 在表单下方显示自动更新的购物清单:

  1. <p>Shopping list:</p>
  2. <ul>
  3. <li v-for="item in shoppingList">{{item.name}}, {{item.number}}</li>
  4. </ul>

下面是我们第一个 Vue 表单的最终代码。

实例

在本例中,我们可以将新商品添加到购物列表中。

  1. <div id="app">
  2. <form v-on:submit.prevent="addItem">
  3. <p>Add item</p>
  4. <p>Item name: <input type="text" required v-model="itemName"></p>
  5. <p>How many: <input type="number" v-model="itemNumber"></p>
  6. <button type="submit">Add item</button>
  7. </form>
  8. <p>Shopping list:</p>
  9. <ul>
  10. <li v-for="item in shoppingList">{{item.name}}, {{item.number}}</li>
  11. </ul>
  12. </div>
  13. <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
  14. <script>
  15. const app = Vue.createApp({
  16. data() {
  17. return {
  18. itemName: null,
  19. itemNumber: null,
  20. shoppingList: [
  21. { name: 'Tomatoes', number: 5 }
  22. ]
  23. }
  24. },
  25. methods: {
  26. addItem() {
  27. let item = {
  28. name: this.itemName,
  29. number: this.itemNumber
  30. }
  31. this.shoppingList.push(item)
  32. this.itemName = null
  33. this.itemNumber = null
  34. }
  35. }
  36. })
  37. app.mount('#app')
  38. </script>
注意上面的实例中提供的双向绑定 v-model
  • 当 HTML 输入更改时,v-model会更新 Vue 实例数据
  • 当 Vue 实例数据发生变化时,v-model 还会更新 HTML 输入