說說 Vue.js 中的 v-model 指令以及如何綁定表單元素

我們可以使用 Vue.js 中的 v-model 指令來完成表單數(shù)據(jù)的雙向綁定忘晤。

1 基礎(chǔ)用法

1.1 文本輸入框(text)

這里演示了在文本輸入框上輸入的內(nèi)容,會(huì)實(shí)時(shí)映射到綁定的數(shù)據(jù)上激捏。

html:

<div id="app">
    <input type="text" v-model="content" placeholder="請(qǐng)輸入">
    <p>輸入框:{{content}}</p>
</div>

js:

<script>
    var app = new Vue({
        el: '#app',
        data: {
            content: ''
        }
    });
</script>

效果:

1.2 大文本輸入框(textarea)

綁定方法與文本輸入框相同设塔。

html:

<div id="app2">
    <textarea v-model="content" placeholder="請(qǐng)輸入"></textarea>
    <p>內(nèi)容:</p>
    <p style="white-space: pre">{{content}}</p>
</div>

js:

var app2 = new Vue({
    el: '#app2',
    data: {
        content: ''
    }
});

效果:

這里對(duì)展示的內(nèi)容所對(duì)應(yīng)的 <p> 元素加了 white-space: pre 樣式,這樣內(nèi)容即使帶有回車符也會(huì)保留远舅。


注意:表單控件所顯示的值只依賴于所綁定的數(shù)據(jù)闰蛔,所以即便設(shè)置了表單控件中的 value值,也不會(huì)起作用哦图柏。同理序六,<textarea>xxx</textarea>之間的值也無效。

之前的示例我們可以發(fā)現(xiàn)蚤吹,使用中文輸入法時(shí)例诀,只有確定選中的詞語,才會(huì)被如果 Vue.js 所更新裁着。如果希望輸入的內(nèi)容實(shí)時(shí)更新繁涂,那么可以使用 @input

html:

<div id="app3">
    <textarea @input="inputHandler" placeholder="請(qǐng)輸入"></textarea>
    <p>內(nèi)容:</p>
    <p style="white-space: pre">{{content}}</p>
</div>

js:

var app3 = new Vue({
    el: '#app3',
    data: {
        content: ''
    },
    methods: {
        inputHandler: function (event) {
            this.content = event.target.value;
        }
    }
});

可以看出跨算,即使在 @input 定義的函數(shù)不帶參數(shù)爆土,Vue.js 也會(huì)在定義的函數(shù)(示例中的 inputHandler)中傳入 event 原生事件對(duì)象。

效果:

1.3 單選框

單選框一般都有多個(gè)條件可供選擇诸蚕,既然是單選框步势,自然希望實(shí)現(xiàn)互斥效果,我們可以使用 v-model 指令配合單選框的 value 來實(shí)現(xiàn)背犯。

html:

<div id="app4">
    <input id="radio1" type="radio" v-model="checked" value="文學(xué)">
    <label for="radio1">文學(xué)</label>
    <input id="radio2" type="radio" v-model="checked" value="藝術(shù)">
    <label for="radio2">藝術(shù)</label>
    <input id="radio3" type="radio" v-model="checked" value="經(jīng)濟(jì)">
    <label for="radio3">經(jīng)濟(jì)</label>
    <br>
    <p>選擇了:{{checked}}</p>
</div>

js:

var app4 = new Vue({
    el: '#app4',
    data: {
        checked: '文學(xué)'
    }
});

效果:

1.4 復(fù)選框

復(fù)選框的綁定方式與單選框相同坏瘩,只不過復(fù)選框所對(duì)應(yīng)的數(shù)據(jù)類型是數(shù)組罷了。

html:

<div id="app5">
    <input id="checkbox1" type="checkbox" v-model="checked" value="文學(xué)">
    <label for="checkbox1">文學(xué)</label>
    <input id="checkbox2" type="checkbox" v-model="checked" value="藝術(shù)">
    <label for="checkbox2">藝術(shù)</label>
    <input id="checkbox3" type="checkbox" v-model="checked" value="經(jīng)濟(jì)">
    <label for="checkbox3">經(jīng)濟(jì)</label>
    <br>
    <p>選擇了:{{checked}}</p>
</div>

js:

var app5 = new Vue({
    el: '#app5',
    data: {
        checked: ['文學(xué)','藝術(shù)']
    }
});

效果:

1.5 下拉選擇框

1.5.1 單選

html:

<div id="app6">
    <select v-model="selected">
        <option value="1">文學(xué)</option>
        <option value="2">藝術(shù)</option>
        <option>經(jīng)濟(jì)</option>
    </select>
    <br>
    <p>選擇了:{{selected}}</p>
</div>

js:

var app6 = new Vue({
    el: '#app6',
    data: {
        selected: '1'
    }
});

效果:

可以看出漠魏,如果 <option> 含有 value 值倔矾,則會(huì)先匹配該值;如果沒有柱锹,則匹配 <option> 中的 text 值(比如示例中的 <option>經(jīng)濟(jì)</option>)哪自。

1.5.2 多選

<select> 標(biāo)簽添加 multiple 屬性,即可實(shí)現(xiàn)多選禁熏。

html:

<div id="app7">
    <select v-model="selected" multiple>
        <option value="1">文學(xué)</option>
        <option value="2">藝術(shù)</option>
        <option>經(jīng)濟(jì)</option>
    </select>
    <br>
    <p>選擇了:{{selected}}</p>
</div>

在實(shí)際應(yīng)用場(chǎng)景壤巷,<select> 標(biāo)簽中的 <opinion> 一般是通過 v-for 指令動(dòng)態(tài)輸出的,其中每一項(xiàng)的 value 或 text 都可以使用 v-bind 動(dòng)態(tài)輸出的瞧毙。

html:

<div id="app8">
    <select v-model="selected">
        <option v-for="option in options"
                 :value="option.value">{{option.text}}
        </option>
    </select>
    <br>
    <p>選擇了:{{selected}}</p>
</div>

js:

var app8 = new Vue({
    el: '#app8',
    data: {
        selected: '1',
        options: [
            {text: '文學(xué)', value: '1'},
            {text: '藝術(shù)', value: '2'}
        ]
    }
});

效果:


因?yàn)?select 標(biāo)簽的呈現(xiàn)樣式依賴于瀏覽器胧华,所以在實(shí)際業(yè)務(wù)場(chǎng)景中寄症,我們更多的是使用 div 來模擬 select 標(biāo)簽的列表功能,而這可以通過使用 Vue.js 自定義組件的方式來實(shí)現(xiàn)一個(gè)通用的下拉選擇組件矩动。

以上示例 DEMO

2 綁定動(dòng)態(tài)變量

之前所說的示例有巧,v-model 綁定的都是靜態(tài)變量。我們可以使用 v-bind 來綁定動(dòng)態(tài)變量悲没。

2.1 單選框

html:

<div id="app">
    <input id="radio1" type="radio" v-model="picked" :value="value">
    <label for="radio1">文學(xué)</label>
    <input id="radio2" type="radio" v-model="picked" :value="value2">
    <label for="radio2">藝術(shù)</label>
    <input id="radio3" type="radio" v-model="picked" :value="value3">
    <label for="radio3">經(jīng)濟(jì)</label>
    <br>
    <p>{{picked}}</p>
    <p>{{value}},{{value2}},{{value3}}</p>
</div>

js:

var app = new Vue({
    el: '#app',
    data: {
        picked: false,
        value: '文學(xué)',
        value2: '藝術(shù)',
        value3: '經(jīng)濟(jì)',
    }
});

效果:

示例中定義的單選框默認(rèn)值為 picked 所定義的 false篮迎。當(dāng)選中某個(gè)單選框時(shí),則動(dòng)態(tài)綁定在 :value 中定義的變量示姿。

2.2 復(fù)選框

html:

<div id="app2">
    <input id="checkbox" type="checkbox" v-model="checked" :true-value="value1" :false-value="value2">
    <label for="checkbox">開關(guān)</label>
    <p>checked:{{checked}}</p>
    <p>value1:{{value1}}</p>
    <p>value2:{{value2}}</p>
</div>

js:

var app2 = new Vue({
    el: '#app2',
    data: {
        value1: '亮',
        value2: '暗',
        checked: ''
    }
});

效果:

復(fù)選框的默認(rèn)值綁定的是 v-model 定義的變量柑潦,而勾選與取消勾選所綁定的值,則分別由 :true-valuefalse-value 來實(shí)現(xiàn)動(dòng)態(tài)綁定峻凫。

2.3 下拉選擇框

html:

<div id="app3">
    <select v-model="selected">
        <option :value="{number:1}">文學(xué)</option>
        <option :value="{number:2}">藝術(shù)</option>
    </select>
    <br>
    <p>選擇了:{{selected.number}}</p>
</div>

js:

var app3 = new Vue({
    el: '#app3',
    data: {
        selected: ''
    }
});

效果:

當(dāng)選中某個(gè) option 時(shí)渗鬼,app3.selected 為 Object,所以 selected.number 即為 :value 定義的綁定值荧琼。

以上示例 DEMO

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末譬胎,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子命锄,更是在濱河造成了極大的恐慌堰乔,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件脐恩,死亡現(xiàn)場(chǎng)離奇詭異镐侯,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)驶冒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門苟翻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人骗污,你說我怎么就攤上這事崇猫。” “怎么了需忿?”我有些...
    開封第一講書人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵诅炉,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我屋厘,道長(zhǎng)涕烧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任汗洒,我火速辦了婚禮议纯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘仲翎。我一直安慰自己痹扇,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開白布溯香。 她就那樣靜靜地躺著鲫构,像睡著了一般。 火紅的嫁衣襯著肌膚如雪玫坛。 梳的紋絲不亂的頭發(fā)上结笨,一...
    開封第一講書人閱讀 51,208評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音湿镀,去河邊找鬼炕吸。 笑死,一個(gè)胖子當(dāng)著我的面吹牛勉痴,可吹牛的內(nèi)容都是我干的赫模。 我是一名探鬼主播,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蒸矛,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼瀑罗!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起雏掠,我...
    開封第一講書人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤斩祭,失蹤者是張志新(化名)和其女友劉穎酬蹋,沒想到半個(gè)月后铁瞒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡衅斩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年绑青,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了诬像。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡闸婴,死狀恐怖颅停,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情掠拳,我是刑警寧澤癞揉,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站溺欧,受9級(jí)特大地震影響喊熟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜姐刁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一芥牌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧聂使,春花似錦壁拉、人聲如沸谬俄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至痘昌,卻和暖如春钥勋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背辆苔。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來泰國打工算灸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人驻啤。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓菲驴,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親骑冗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子谢翎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 表單類空間承載了一個(gè)網(wǎng)頁數(shù)據(jù)的錄入與交互,本章將介紹如何使用指令v-model完成表單的雙向綁定沐旨。 6.1基本用法...
    六個(gè)周閱讀 859評(píng)論 1 6
  • 一森逮、了解Vue.js 1.1.1 Vue.js是什么? 簡(jiǎn)單小巧磁携、漸進(jìn)式褒侧、功能強(qiáng)大的技術(shù)棧 1.1.2 為什么學(xué)習(xí)...
    蔡華鵬閱讀 3,321評(píng)論 0 3
  • 主要還是自己看的,所有內(nèi)容來自官方文檔谊迄。 介紹 Vue.js 是什么 Vue (讀音 /vju?/闷供,類似于 vie...
    Leonzai閱讀 3,348評(píng)論 0 25
  • 吳書仙,中國首位葡萄酒獨(dú)立酒評(píng)人统诺,在法國學(xué)習(xí)葡萄酒專業(yè)品評(píng)歪脏,經(jīng)常去世界各地葡萄酒產(chǎn)區(qū)訪問和參加專業(yè)葡萄酒評(píng)比,國際...
    藍(lán)色1230閱讀 910評(píng)論 0 50
  • 因工作原因粮呢,近期一段時(shí)間婿失,我先后在兩所不同的醫(yī)院看守病人。在ICU的床前啄寡,以及ICU門口的家屬休息室聽到了許多未曾...
    取不好名字被注冊(cè)啦閱讀 624評(píng)論 0 0