<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                >[success] # v-model 1. 常見表單元素:`input(radio, text, address, email....)`、`select`、 `checkbox`、 `textarea` 2. 如果想在表單元素上進行雙向綁定寫法 ~~~ <input :value="text" @input="event => text = event.target.value"> ~~~ 3. `vue` 也提供了`v-model` 這個語法糖可以更簡單的進行在表單元素上創建雙向數據綁定 ~~~ <input v-model="text"> ~~~ 4. `v-model` 配合 `input `使用時候語法糖形式綁定事件也不同[源碼參考](https://github1s.com/vuejs/core/blob/HEAD/packages/runtime-dom/src/directives/vModel.ts#L52-L59) * `text `和 `textarea `元素使用 `value property` 和 `input `事件; * `checkbox `和 `radio `使用 `checked property` 和 `change `事件; * `select `字段將 `value `作為 `prop `并將 `change `作為事件。 5. 組件也可以使用`v-model` 具體參考組件章節 >[info] ## 原生實現類vue 雙向綁定 1. `v-model`配合`input`使用時候語法糖形式綁定事件也不同[源碼參考](https://github1s.com/vuejs/core/blob/HEAD/packages/runtime-dom/src/directives/vModel.ts#L52-L59)因此本質上還是對dom 操作,使用原生做一個類似實現效果 >[danger] ##### input[text] -- onInput ![](https://img.kancloud.cn/f0/ab/f0ab9d612e3beea6115be206da566acf_449x70.png) ~~~html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> </head> <body> <div> <div id="inputTextVal"></div> <input id="text" value="" /> </div> <script> // 普通文本輸入 ;(function inputText() { const textDom = document.getElementById('text') textDom.addEventListener('input', function (e) { document.getElementById('checkboxVal').innerText = e.target.value console.log(e.target.value) }) })() </script> </body> </html> ~~~ >[danger] ##### input[checkbox] -- onChange 1. `checkbox` 在原生中如果被選中會在節點上增加`checked` 屬性,只要收集`name`屬性標記相同一組`checkbox` 中`value`屬性即可 ![](https://img.kancloud.cn/05/46/0546afce7fa97a316890012d12f6ce68_466x112.png) ~~~html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> </head> <body> <div> <div id="checkboxVal"></div> <input type="checkbox" value="1" /> 足球 <input type="checkbox" value="2" /> 籃球 <input type="checkbox" value="3" /> 乒乓球 </div> <script> // checkbox 多選 ;(function inputCheckbox() { const ls = [] const checkList = document.querySelectorAll( 'input[type="checkbox"]' ) // 綁定事件 function checkChange(callback) { checkList.forEach((item) => { item.addEventListener('change', function (e) { if (e.target.checked) { ls.push(e.target.value) } else { const index = ls.findIndex((val) => { val === e.target.value }) ls.splice(index, 1) } callback?.() }) }) } // 數據渲染頁面 checkChange(() => { document.getElementById('checkboxVal').innerText = ls.toString() }) })() </script> </body> </html> ~~~ >[danger] ##### radio -- onChange 1. `radio` 需要配合 `name` 字段形成互斥,綁定`change` 事件獲取 `value` 即可 ![](https://img.kancloud.cn/6b/c2/6bc2e79b46019b066d797f5d90219883_226x78.png) ~~~ <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> </head> <body> <div> <div id="radioVal"></div> <input type="radio" name="gender" value="1" /> 男 <input type="radio" name="gender" value="2" /> 女 </div> <script> ;(function inputRadio() { const radioChecked= document.querySelector( 'input[type="radio"]' ) // 綁定事件 function checkChange(callback) { radioChecked.addEventListener('change', function (e) { callback?.(e.target.value) }) } // 數據渲染頁面 checkChange((val) => { document.getElementById('radioVal').innerText = val }) })() </script> </body> </html> ~~~ >[danger] ##### select -- onChange ![](https://img.kancloud.cn/88/7e/887e42a6ab8f96586a8779989259700e_318x181.png) ~~~ <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> </head> <body> <div> <div id="selectedVal"></div> <select id="ss"> <option value="1">大連</option> <option value="2">上海</option> <option value="3">北京</option> <option value="4" id="op1">天津</option> </select> </div> <script> ;(function selected() { const selected = document.querySelector('#ss') // 綁定事件 selected.addEventListener('change', function (e) { console.log(e.target.value) const option = document.querySelector( `option[value="${e.target.value}"]` ) document.getElementById('selectedVal').innerText = e.target.value + ',' + option.textContent }) })() </script> </body> </html> ~~~ >[info] ## v-model 和 原生屬性 1. `v-model`會忽略任何表單元素上初始的`value`、`checked`或`selected`attribute。它將始終將當前綁定的 JavaScript 狀態視為數據的正確來源。你應該在 JavaScript 中使用`data`選項來聲明該初始值。理解為在上面原生案例可以知道其實通過`dom `原生提供的固定標記屬性來獲取選中值,當你在`vue `中使用` v-model`,這些屬性將會被忽略,v-model 只會對自己數據源負責 vue自己`true-value`和`false-value` 也需要后續補充 >[danger] ##### 修飾符 - lazy 1. 默認情況下,`v-model`在進行雙向綁定時,綁定的是`input`事件,那么會在每次內容輸入后就將最新的值和綁定的屬性進行同步 2. `v-model`后跟上lazy修飾符,那么會將綁定的事件切換為 `change `事件,只有在提交時才會觸發 ~~~ <!-- 在 "change" 事件后同步更新而不是 "input" --> <input v-model.lazy="msg" /> ~~~ >[danger] ##### 修飾符 - number 1. `v-model`綁定后的值總是`string`類型,`vue2`即使在我們設置`type`為`number`也是`string`類型,`vue3`在`number`修飾符會在輸入框有`type="number"`時自動啟用 2. 希望轉換為數字類型,那么可以使用 `.number `修飾符 ~~~ <input v-model.number="age" /> ~~~ >[danger] ##### 修飾符 - .trim 1. 你想要默認自動去除用戶輸入內容中兩端的空格,你可以在` v-model `后添加` .trim` 修飾 ~~~ <input v-model.trim="msg" /> ~~~ >[danger] ##### 官網給的提示 對于需要使用[IME](https://en.wikipedia.org/wiki/Input_method)的語言 (中文,日文和韓文等),你會發現`v-model`不會在 IME 輸入還在拼字階段時觸發更新。如果你的確想在拼字階段也觸發更新,請直接使用自己的`input`事件監聽器和`value`綁定而不要使用`v-model`。 >[danger] ##### 官網參考 [v-model](https://cn.vuejs.org/guide/essentials/forms.html#checkbox-2)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看