15 表单输入绑定

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

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

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

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

    index.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就是这样工作的。

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

    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(代码段)

    单选按钮

    很容易猜出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: ''

    根据选择的选项,变量selected获得HTML或或JavaScript的值。

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

    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的魔力,它获得了从下拉列表中选择的选项的值。

    多选下拉菜单

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

    index.html (代码段)

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

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

    在实时场景中,下拉菜单的选项并不总是已知的。 另外,对值进行硬编码永远不是一个好习惯。 因此,在必须处理动态数据的情况下,可以将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数组中的第一个单词。

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

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

    index.js

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

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