前端MVC Vue2學習總結(五)——表單輸入綁定、組件

来源:https://www.cnblogs.com/best/archive/2018/01/03/8182847.html
-Advertisement-
Play Games

一、表單輸入綁定 1.1、基礎用法 你可以用 v-model 指令在表單控制項元素上創建雙向數據綁定。它會根據控制項類型自動選取正確的方法來更新元素。儘管有些神奇,但 v-model 本質上不過是語法糖,它負責監聽用戶的輸入事件以更新數據,並特別處理一些極端的例子。 v-model 並不關心表單控制項初始 ...


一、表單輸入綁定

1.1、基礎用法

你可以用 v-model 指令在表單控制項元素上創建雙向數據綁定。它會根據控制項類型自動選取正確的方法來更新元素。儘管有些神奇,但 v-model 本質上不過是語法糖,它負責監聽用戶的輸入事件以更新數據,並特別處理一些極端的例子。

v-model 並不關心表單控制項初始化所生成的值。因為它會選擇 Vue 實例數據來作為具體的值。

1.1.1、文本

<input v-model="message" placeholder="edit me">
<p>Message is: {{ message }}</p>

1.1.2、多行文本

<span>Multiline message is:</span>
<p style="white-space: pre">{{ message }}</p>
<br>
<textarea v-model="message" placeholder="add multiple lines"></textarea>

在文本區域插值( <textarea></textarea> ) 並不會生效,應用 v-model 來代替

1.1.3、覆選框

單個勾選框,邏輯值:

<input type="checkbox" id="checkbox" v-model="checked">
<label for="checkbox">{{ checked }}</label>

多個勾選框,綁定到同一個數組:

<input type="checkbox" id="jack" value="Jack" v-model="checkedNames">
<label for="jack">Jack</label>
<input type="checkbox" id="john" value="John" v-model="checkedNames">
<label for="john">John</label>
<input type="checkbox" id="mike" value="Mike" v-model="checkedNames">
<label for="mike">Mike</label>
<br>
<span>Checked names: {{ checkedNames }}</span>
new Vue({
  el: '...',
  data: {
    checkedNames: []
  }
})

1.1.4、單選按鈕

<input type="radio" id="one" value="One" v-model="picked">
<label for="one">One</label>
<br>
<input type="radio" id="two" value="Two" v-model="picked">
<label for="two">Two</label>
<br>
<span>Picked: {{ picked }}</span>

1.1.5、選擇列表

單選列表:

<select v-model="selected">
  <option>A</option>
  <option>B</option>
  <option>C</option>
</select>
<span>Selected: {{ selected }}</span>

多選列表(綁定到一個數組):

<select v-model="selected" multiple>
  <option>A</option>
  <option>B</option>
  <option>C</option>
</select>
<br>
<span>Selected: {{ selected }}</span>

動態選項,用 v-for 渲染:

<select v-model="selected">
  <option v-for="option in options" v-bind:value="option.value">
    {{ option.text }}
  </option>
</select>
<span>Selected: {{ selected }}</span>
new Vue({
  el: '...',
  data: {
    selected: 'A',
    options: [
      { text: 'One', value: 'A' },
      { text: 'Two', value: 'B' },
      { text: 'Three', value: 'C' }
    ]
  }
})

1.2、綁定 value

對於單選按鈕,勾選框及選擇列表選項, v-model 綁定的 value 通常是靜態字元串(對於勾選框是邏輯值):

<!-- 當選中時,`picked` 為字元串 "a" -->
<input type="radio" v-model="picked" value="a">
<!-- `toggle` 為 true 或 false -->
<input type="checkbox" v-model="toggle">
<!-- 當選中時,`selected` 為字元串 "abc" -->
<select v-model="selected">
  <option value="abc">ABC</option>
</select>

但是有時我們想綁定 value 到 Vue 實例的一個動態屬性上,這時可以用 v-bind 實現,並且這個屬性的值可以不是字元串。

1.2.1、覆選框

<input
  type="checkbox"
  v-model="toggle"
  v-bind:true-value="a"
  v-bind:false-value="b"
>
// 當選中時
vm.toggle === vm.a
// 當沒有選中時
vm.toggle === vm.b

1.2.2、單選按鈕

<input type="radio" v-model="pick" v-bind:value="a">
// 當選中時
vm.pick === vm.a

1.2.3、選擇列表設置

<select v-model="selected">
    <!-- 內聯對象字面量 -->
  <option v-bind:value="{ number: 123 }">123</option>
</select>
// 當選中時
typeof vm.selected // -> 'object'
vm.selected.number // -> 123

示例:

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title>表單</title>
    </head>

    <body>
        <div id="vm">
            <p>
                <label for="name">姓名</label>
                <input v-model="name" id="name" name="name" value="tom" />值:
                <span v-text="name"></span> <span v-html="name"></span> <span>{{name}}</span>
            </p>
            <p>
                <label>愛好</label>
                <input type="checkbox" v-model="hobbies" value="代碼" id="hobbies1" />
                <label for="hobbies1">代碼</label>
                <input type="checkbox" v-model="hobbies" value="運動" id="hobbies2" />
                <label for="hobbies2">運動</label>
                <input type="checkbox" v-model="hobbies" value="音樂" id="hobbies3" />
                <label for="hobbies3">音樂</label> 值:{{hobbies.join(',')}}
            </p>
            <p>
                <label>性別</label>
                <input type="radio" v-model="sex" value="男" id="sex1" />
                <label for="sex1"></label>
                <input type="radio" v-model="sex" value="女" id="sex2" />
                <label for="sex2"></label>
                <input type="radio" v-model="sex" value="保密" id="sex3" />
                <label for="sex3">保密</label> 值:{{sex}}
            </p>
            <p>
                <label>精通</label>
                <select v-model="skill1">
                    <option value="Java">Java</option>
                    <option value="前端">前端</option>
                    <option value="Oracle">Oracle</option>
                    <option value="">--請選擇--</option>
                </select>
                值:{{skill1}}
            </p>
            <p>
                <label>擅長</label>
                <select v-model="skill2" multiple="multiple" size="5">
                    <option value="C#">C#</option>
                    <option value="Ruby">Ruby</option>
                    <option value="Go">Go</option>
                    <option value="PHP">PHP</option>
                    <option value="python">python</option>
                </select>
                值:{{skill2}}
            </p>
            <p>
                <input type="checkbox" v-model="isAllow" id="isAllow" />
                <label for="isAllow">同意本網站協定</label> 值:{{isAllow}}
            </p>
            <p>
                <input type="checkbox" v-model="isOk" id="isOk" v-bind:true-value="yes" v-bind:false-value="no" />
                <label for="isOk">同意本網站協定</label> 值:{{isOk}}
            </p>
            <p>
                <input type="checkbox" v-model="isOk2" id="isOk2" v-bind:true-value="'yes'" v-bind:false-value="'no'" />
                <label for="isOk2">同意本網站協定</label> 值:{{isOk2}}
            </p>
            <p>
                <input type="radio" v-model="isSend" name="isSend" value="發送"/>發送
                <input type="radio" v-model="isSend" name="isSend" value="不發送"/>不發送
                <label>發送簡訊</label> 值:{{isSend}}
            </p>
            <p>
                <label>等級</label>
                <select v-model="grade">
                    <option :value="{level:1}">A級</option>
                    <option :value="{level:2}">B級</option>
                    <option v-bind:value="{level:3}">C級</option>
                </select>
                值:{{grade.level}}
            </p>
            <p>
                <label for="name">姓名</label>
                <textarea rows="5" cols="50">{{name}}</textarea>
            </p>
        </div>
        <script src="../js/vue.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            var vm = new Vue({
                el: "#vm",
                data: {
                    isShow: true,
                    name: "rose",
                    hobbies: ["代碼"],
                    sex: '保密',
                    skill1: '',
                    skill2: ['PHP'],
                    isAllow: false,
                    isOk: "同意",
                    yes: '同意',
                    no: '不同意',
                    isOk2: "yes",
                    isSend:'不發送',
                    grade:{
                        name:"技術等級",
                        level:0
                    }
                }
            });
        </script>
    </body>

</html>

結果:

1.3、修飾符

1.3.1、.lazy

在預設情況下, v-model 在 input 事件中同步輸入框的值與數據,但你可以添加一個修飾符 lazy ,從而轉變為在 change 事件中同步:

<!-- 在 "change" 而不是 "input" 事件中更新 -->
<input v-model.lazy="msg" >

示例:

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title>表單</title>
    </head>
    <body>
        <div id="vm">
            <p>
                <label for="name">姓名</label>
                <input v-model="name" id="name" name="name" value="tom" /> 值:
                <span v-text="name"></span>
            </p>
            <p>
                <label>姓名</label>
                <input v-model.lazy="name" value="tom" /> 值:
                <span v-text="name"></span>
            </p>
        </div>
        <script src="../js/vue.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            var vm = new Vue({
                el: "#vm",
                data: {
                    name: "rose"
                }
            });
        </script>
    </body>

</html>

結果:

1.3.2、.number

如果想自動將用戶的輸入值轉為 Number 類型(如果原值的轉換結果為 NaN 則返回原值),可以添加一個修飾符 number 給 v-model 來處理輸入值:

<input v-model.number="age" type="number">

這通常很有用,因為在 type="number" 時 HTML 中輸入的值也總是會返回字元串類型。

示例:

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title>表單</title>
    </head>

    <body>
        <div id="vm">
            <p>
                <label for="age">年齡</label>
                <input v-model="age" id="age" name="age" type="number" /> 值:{{age}}
            </p>
            <p>
                <label for="age">年齡</label>
                <input v-model.number="age" id="age" name="age"/> 值:{{age}}
                類型:{{typeof(age)}}
            </p>
        </div>
        <script src="../js/vue.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            var vm = new Vue({
                el: "#vm",
                data: {
                    name: "rose",
                    age: "18"
                }
            });
        </script>
    </body>

</html>

結果:

1.3.2、.trim

如果要自動過濾用戶輸入的首尾空格,可以添加 trim 修飾符到 v-model 上過濾輸入:

<input v-model.trim="msg">

示例:

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title>表單</title>
    </head>

    <body>
        <div id="vm">
            <p>
                <label for="memo1">自我介紹</label
              
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • React 可被靈活地運用在各種項目中。你可以用它創建新的應用程式,也可以逐漸地將其加入到現有的代碼庫中而無需重寫。 ...
  • 我使用的Ghost博客一直使用者預設的Casper主題。我向來沒怎麼打理過自己博客,一方面認為自己不夠專業,很難寫出質量比較高的文字;另一方面認為博客太耗時間,很容易影響正常的工作內容。最近公司即將搬遷,我的開發工作也告一段落,因此抽點時間自定義一個自己的博客主頁。 備註:上圖來自GhostChin ...
  • 文檔對象模型是用於HTML和XML文檔的應用程式編程介面,它定義文檔的邏輯結構,以及訪問和操作文檔的方式。 ...
  • 前言 (以下內容為一個朋友所述)今天我想跟大家分享幾個前端經典的面試題,為什麼我突然想寫這麼一篇文章呢?今天我應公司要求去面試了下幾位招聘者,然後又現場整不出幾個難題,就搜了一下前端變態面試題! HAHA,前提我並不是一個變態,欺負人的面試官.只是我希望看看對方的邏輯能力! 從而又拿這些面試題進行了 ...
  • 前面的話 集合、字典和散列表可以存儲不重覆的值。在集合中,我們感興趣的是每個值本身,並把它當作主要元素。在字典中,我們用[鍵,值]的形式來存儲數據。在散列表中也是一樣(也是以[鍵,值]對的形式來存儲數據)。但是兩種數據結構的實現方式略有不同,本文將詳細介紹字典和散列表這兩種數據結構 字典 集合表示一 ...
  • json相信大家都用的多,jsonp我就一直沒有機會用到,但也經常看到,只知道是“用來跨域的”,一直不知道具體是個什麼東西。今天總算搞明白了。下麵一步步來搞清楚jsonp是個什麼玩意。 同源策略 首先基於安全的原因,瀏覽器是存在同源策略這個機制的,同源策略阻止從一個源載入的文檔或腳本獲取或設置另一個 ...
  • 對於一個多人團隊來說,制定一個統一的規範是必要的,因為個性化的東西無法產生良好的聚合效果,規範化可以提高編碼工作效率,使代碼保持統一的風格,以便於代碼整合和後期維護。 2.1 瀏覽器相容 根據公司業務要求而定,一般: 主流程測試:Chrome 30+、IE9+; 完整測試: Chrome 21、IE ...
  • 1、vertical-align基本認識 支持的屬性值: ①線類:baseline(預設),top,middle,bottom ②文本類:text-top,text-bottom ③上標下標類:sub,super ④數值百分比類: 數值和百分比的共性:ⅰ都帶數字;ⅱ都支持負值;ⅲ行為表現一致(都是在 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...