注:此內容摘抄自:梁灝的《Vue.js實戰》
注:記得要引入vue.js才能運行哦,文章中貼出的代碼直接復制是不行的,html css js 都放在了一起,而且也沒有引用vue.js。
基本用法
1.表單控件在實際業務較為常見,比如單選、多選、下拉選擇、輸入框等,用他們可以完成數據的錄入、校驗、提交等。Vue.js提供了v-model指令,用於在表單類元素上的雙向綁定數據。
<div class="app1"> <input type="text" v-model="message" placeholder="輸入..." /> <p>輸入的內容是:{{message}}</p> </div> var app1=new Vue({ el:'.app1', data:{ message:'' } });
對於文本域textarea也是同樣的用法。
2.使用v-model時,如果是用中文輸入法輸入中文,一般在沒有選定詞組前,也就是在拼音階段,Vue是不會更新數據的,當敲下漢字時才會觸發更新。如果希望總是實時更新,可以用@input代替v-model。事實上,v-model也是一個特殊的語法糖,只不過它會在不同的表單上智能處理。
<div class="app2"> <input type="text" @input="handleInput" placeholder="輸入..." /> <p>輸入的內容是:{{message}}</p> </div> var app2=new Vue({ el:'.app2', data:{ message:'' }, methods:{ handleInput:function(e){ this.message=e.target.value; } } });
3.單選按鈕
單選按鈕在單獨使用時,不需要v-model,直接使用v-bind綁定一個布爾類型的值,為真時選中,為假時不選。
<div class="app3"> <input type="radio" name="" id="button1" value="" :checked="picked" /> <label for="button1">單選按鈕</label> </div> var app3=new Vue({ el:'.app3', data:{ picked:true } });
如果是組合使用來實現互斥選擇效果,就需要v-model配合value來使用:
<div class="app4"> <input type="radio" name="" id="html" value="html" v-model="picked" /> <label for="html">HTML</label> <br /> <input type="radio" name="" id="js" value="js" v-model="picked" /> <label for="js">JS</label> <br /> <input type="radio" name="" id="css" value="css" v-model="picked" /> <label for="css">CSS</label> <br /> <p>選擇的項是:{{picked}}</p> </div> var app4=new Vue({ el:'.app4', data:{ picked:'js' } });
4.復選框
復選框也分單獨使用和組合使用,不過用法稍與單選不同。復選框單獨使用時,也是用v-model來綁定一個布爾值。
<div class="app5"> <input type="checkbox" name="checked" id="checked" value="" v-model="checked" /> <label for="checked">選擇狀態:{{checked}}</label> </div> var app5=new Vue({ el:'.app5', data:{ checked:false } });
組合使用時,也是v-model與value一起,多個勾選框都綁定到同一個數組類型的數據,value的值在數組當中,就會選中這一項。這個過程也是雙向的,在勾選時,value的值也會自動push到這個數組中:
<div class="app6"> <input type="checkbox" name="" id="html" value="html" v-model="checked" /> <label for="html">HTML</label> <br /> <input type="checkbox" name="" id="js" value="js" v-model="checked" /> <label for="js">JS</label> <br /> <input type="checkbox" name="" id="css" value="css" v-model="checked" /> <label for="css">CSS</label> <br /> <p>選擇的項是:{{checked}}</p> </div> var app6=new Vue({ el:'.app6', data:{ checked:['html','css'] } });
5.選擇列表
選擇列表局勢下拉選擇器,也是常見的表單控件,同樣也分為單選和多選兩種方式。
<div class="app7"> <select name="" v-model="selected"> <option>html</option> <option value="js">JS</option> <option>CSS</option> </select> <p>選擇的項是:{{selected}}</p> </div> var app7=new Vue({ el:'.app7', data:{ selected:'html' } });
<option>是備選項,如果含有value屬性,v-model就會優先匹配value的值;如果沒有,就會直接匹配<option>的text,比如選中第二項時,selected的值是js而不是JS。
給<selected>添加屬性multiple就可以多選了,此時v-model綁定的是一個數組,與復選框用法類似。(本人覺得太丑了,就不列舉了。而且好像只有一開始默認值是多選,然后自己再點擊就是單選了)
在業務中,<option>經常用v-for動態輸出,value和text也是用v-bind來動態輸出的。
<div class="app9"> <select name="" v-model="selected"> <option v-for="option in options" :value="option.value">{{option.text}}</option> </select> <p>選擇的項是:{{selected}}</p> </div> var app9=new Vue({ el:'.app9', data:{ selected:'html', options:[ { text:'HTML', value:'html' }, { text:'JavaScript', value:'js' }, { text:'CSS', value:'css' } ] } })
雖然用選擇列表<select>控件可以很簡單的完成下拉選擇的需求,但是在實際業務中反而不常用,因為它的樣式依賴平台和瀏覽器,無法統一,也不太美觀,功能也有限,比如不支持搜索,所以常見的解決方案是用div模擬一個類似的控件。