15 表单输入绑定

原文: https://javabeginnerstutorial.com/vue-js/15-form-input-bindings/

欢迎参加有约束力的讨论! 现在我们已经了解了这个超级巨星v-model,它用于在表单元素上实现双向数据绑定,让我们直观地了解 Vue 如何在引擎盖下神奇地工作,通过选择正确的更方式来更新特定 HTML 元素,基于它是单选按钮还是复选框还是select元素。

今天,我们将讨论以下内容,

  1. 单选框
  2. 多个复选框
  3. 单选按钮
  4. 单选下拉菜单
  5. 多选下拉菜单
  6. 带有动态选项的下拉菜单

第一件事第一! 以下是我们将要使用的初始代码,

起始代码

index.html

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>Hello Vue!</title>
  5. <!-- including Vue with development version CDN -->
  6. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  7. </head>
  8. <body>
  9. <div id="app">
  10. <h2>Welcome</h2>
  11. </div>
  12. <!-- including index.js file -->
  13. <script src="index.js"></script>
  14. </body>
  15. </html>

index.js

  1. new Vue({
  2. el: "#app",
  3. data: {
  4. }
  5. });

单选框

看下面的代码片段,

index.html(代码段)

  1. <div>
  2. <h4>Single checkbox with a boolean value</h4>
  3. <!-- form input bindings: single checkbox -->
  4. <input type="checkbox" id="single" v-model="chosen">
  5. <label for="single">{{ chosen }}</label>
  6. </div>

index.js

  1. new Vue({
  2. el: "#app",
  3. data: {
  4. chosen: false
  5. }
  6. });

我们有一个idsingle复选框。 让我们有一个变量chosen,该变量在 Vue 实例的data属性中分配为false。 选中该复选框可使chosen的值为true。 当与输入类型checkbox一起使用时,如果是布尔值,v-model就是这样工作的。 single checkbox

多个复选框

现在,让我们有四个复选框,其值均绑定到同一数组。

index.html(代码段)

  1. <div>
  2. <h4>Multiple checkboxes with values of an array</h4>
  3. <!-- value bindings: multiple checkboxes -->
  4. <input type="checkbox" id="cars" value="Cars" v-model="checkedFilms">
  5. <label for="cars">Cars</label>
  6. <input type="checkbox" id="brave" value="Brave" v-model="checkedFilms">
  7. <label for="brave">Brave</label>
  8. <input type="checkbox" id="up" value="Up" v-model="checkedFilms">
  9. <label for="up">Up</label>
  10. <input type="checkbox" id="ratatouille" value="Ratatouille" v-model="checkedFilms">
  11. <label for="ratatouille">Ratatouille</label>
  12. <br/>
  13. <span>Selected pixar films are: {{ checkedFilms }}</span>
  14. </div>

index.js(代码段)

  1. data: {
  2. checkedFilms: []
  3. }

因此,所有四个输入元素均为checkbox类型,并且每个元素都具有与数组checkedFilms”的双向绑定。 请注意,该数组的初始值在 Vue 实例的data属性中为空。 在这里v-model的工作方式是,在数组checkedFilms中填充所选复选框的值。

multiple checkboxes

单选按钮

很容易猜出v-model在单选按钮下的行为。 由于我们只能从组中选择一个单选按钮,因此绑定两种方式的变量将获取所选单选按钮的值。

index.html(代码段)

  1. <div>
  2. <h4>Radio buttons</h4>
  3. <input type="radio" id="html" value="HTML" v-model="selected">
  4. <label for="html">HTML</label>
  5. <br>
  6. <input type="radio" id="css" value="CSS" v-model="selected">
  7. <label for="two">CSS</label>
  8. <br>
  9. <input type="radio" id="javascript" value="JavaScript" v-model="selected">
  10. <label for="JavaScript">JavaScript</label>
  11. <br>
  12. <span>Selected option: {{ selected }}</span>
  13. </div>

index.js(代码段)

  1. data: {
  2. selected: ''
  3. }

根据选择的选项,变量selected获得HTMLCSSJavaScript的值。

radio buttons

单选下拉菜单

这是一个正常的下拉列表,您可以在其中选择一个选项。

index.html(代码段)

  1. <div>
  2. <h4>Radio buttons</h4>
  3. <input type="radio" id="html" value="HTML" v-model="selected">
  4. <label for="html">HTML</label>
  5. <br>
  6. <input type="radio" id="css" value="CSS" v-model="selected">
  7. <label for="two">CSS</label>
  8. <br>
  9. <input type="radio" id="javascript" value="JavaScript" v-model="selected">
  10. <label for="JavaScript">JavaScript</label>
  11. <br>
  12. <span>Selected option: {{ selected }}</span>
  13. </div>

index.js(代码段)

  1. data: {
  2. singleSelect: ''
  3. }

变量singleSelect最初是一个空字符串。 由于v-model的魔力,它获得了从下拉列表中选择的选项的值。 dropdown

多选下拉菜单

在这里,我们可以从下拉菜单中选择多个选项,因此 Vue 实例的data属性中multiselect变量的初始值是一个空数组。

index.html (代码段)

  1. <div>
  2. <h4>Multiselect dropdown</h4>
  3. <select v-model="multiselect" multiple>
  4. <option value="Dance">Dance</option>
  5. <option value="Swim">Swim</option>
  6. <option value="Paint">Paint</option>
  7. <option value="Play tennis">Play tennis</option>
  8. </select>
  9. <br>
  10. <span>I know to: {{ multiselect }}</span>
  11. </div>

index.js(代码段)

  1. data: {
  2. multiselect: []
  3. }

将使用从下拉列表中选择的所有值填充数组。 (对于多项选择,请向下按Ctrl键,然后选择。)

Multi-select dropdown

带有动态选项的下拉菜单

在实时场景中,下拉菜单的选项并不总是已知的。 另外,对值进行硬编码永远不是一个好习惯。 因此,在必须处理动态数据的情况下,可以将v-bindv-model一起使用。 结合使用它们会赋予您无穷的力量! 让我们也利用v-for指令遍历我们可能要处理的所有选项。

index.html(代码段)

  1. <div>
  2. <h4>Handling dynamic options</h4>
  3. <select v-model="dynamicSelection">
  4. <option v-for="letter in alphabet" v-bind:value="letter.word">
  5. {{ letter.for }}
  6. </option>
  7. </select>
  8. <span>Selected letter: {{ dynamicSelection }}</span>
  9. </div>

Index.js(代码段)

  1. data: {
  2. dynamicSelection: 'Apple',
  3. alphabet: [
  4. { word: 'Apple', for: 'A' },
  5. { word: 'Bat', for: 'B' },
  6. { word: 'Cat', for: 'C' }
  7. ]
  8. }

在此,对于alphabet数组中的每个对象,下拉列表中均列出了“A”,“B”和“C”,并且word绑定到了选项标签的value属性。 根据选择的值,worddynamicSelection变量中更新。 请注意,初始值是alphabet数组中的第一个单词。

dropdown with dynamic values

到此为止,让我们看一下到目前为止的完整代码。

index.html

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>Hello Vue!</title>
  5. <!-- including Vue with development version CDN -->
  6. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  7. </head>
  8. <body>
  9. <div id="app">
  10. <h2>Welcome</h2>
  11. <div>
  12. <h4>Single checkbox with a boolean value</h4>
  13. <!-- value bindings: single checkbox -->
  14. <input type="checkbox" id="single" v-model="chosen">
  15. <label for="single">{{ chosen }}</label>
  16. </div>
  17. <hr/>
  18. <div>
  19. <h4>Multiple checkboxes with values of an array</h4>
  20. <!-- value bindings: multiple checkboxes -->
  21. <input type="checkbox" id="cars" value="Cars" v-model="checkedFilms">
  22. <label for="cars">Cars</label>
  23. <input type="checkbox" id="brave" value="Brave" v-model="checkedFilms">
  24. <label for="brave">Brave</label>
  25. <input type="checkbox" id="up" value="Up" v-model="checkedFilms">
  26. <label for="up">Up</label>
  27. <input type="checkbox" id="ratatouille" value="Ratatouille" v-model="checkedFilms">
  28. <label for="ratatouille">Ratatouille</label>
  29. <br/>
  30. <span>Selected pixar films are: {{ checkedFilms }}</span>
  31. </div>
  32. <hr/>
  33. <div>
  34. <h4>Radio buttons</h4>
  35. <input type="radio" id="html" value="HTML" v-model="selected">
  36. <label for="html">HTML</label>
  37. <br>
  38. <input type="radio" id="css" value="CSS" v-model="selected">
  39. <label for="two">CSS</label>
  40. <br>
  41. <input type="radio" id="javascript" value="JavaScript" v-model="selected">
  42. <label for="JavaScript">JavaScript</label>
  43. <br>
  44. <span>Selected option: {{ selected }}</span>
  45. </div>
  46. <hr/>
  47. <div>
  48. <h4>Single select dropdown</h4>
  49. <select v-model="singleSelect">
  50. <option disabled value="">Please select one</option>
  51. <option>Chocolate</option>
  52. <option>Ice cream</option>
  53. <option>Green Tea</option>
  54. </select>
  55. <span>I love: {{ singleSelect }}</span>
  56. </div>
  57. <hr/>
  58. <div>
  59. <h4>Multiselect dropdown</h4>
  60. <select v-model="multiselect" multiple>
  61. <option value="Dance">Dance</option>
  62. <option value="Swim">Swim</option>
  63. <option value="Paint">Paint</option>
  64. <option value="Play tennis">Play tennis</option>
  65. </select>
  66. <br>
  67. <span>I know to: {{ multiselect }}</span>
  68. </div>
  69. <hr/>
  70. <div>
  71. <h4>Handling dynamic options</h4>
  72. <select v-model="dynamicSelection">
  73. <option v-for="letter in alphabet" v-bind:value="letter.word">
  74. {{ letter.for }}
  75. </option>
  76. </select>
  77. <span>Selected letter: {{ dynamicSelection }}</span>
  78. </div>
  79. </div>
  80. <!-- including index.js file -->
  81. <script src="index.js"></script>
  82. <link rel="stylesheet" href="style.css"></link>
  83. </body>
  84. </html>

index.js

  1. new Vue({
  2. el: "#app",
  3. data: {
  4. chosen: false,
  5. checkedFilms: [],
  6. selected: '',
  7. singleSelect: '',
  8. multiselect: [],
  9. dynamicSelection: 'Apple',
  10. alphabet: [
  11. { word: 'Apple', for: 'A' },
  12. { word: 'Bat', for: 'B' },
  13. { word: 'Cat', for: 'C' }
  14. ]
  15. }
  16. });

与往常一样,可以在 GitHub 仓库中找到整个代码,以方便参考。 随意拨叉并编写代码以符合您的内心需求。

现在是时候在您自己的示例中练习其中的一些表单输入,如果您有任何疑问,请在评论部分留言。

祝你今天愉快!