v-bind得使用目得:對(duì)標(biāo)簽內(nèi)屬性賦值時(shí)可以使用data中得變量(會(huì)動(dòng)態(tài)改變或者說(shuō)動(dòng)態(tài)處理屬性值)。
v-bind指令用法:
<a v-bind:href="url"> 跳轉(zhuǎn) </a>
v-bind縮寫形式:
<a :href="url"> 跳轉(zhuǎn) </a>
<!DOCTYPE html><html lang="en"><body> <div id="app"> <a v-bind:href="url">百度</a> </div> <script type="text/javascript" src=http://www.sneakeraddict.net/skin/m04blueskin/image/nopic.gif <script type="text/javascript"> var vm = new Vue({ el:'#app', data:{ url:'特別baidu' } }); </script></body></html>
v-model得底層實(shí)現(xiàn)原理
v-model指令得本質(zhì):其實(shí)相當(dāng)于是v-bind,v-on得結(jié)合
用v-bind去綁定屬性值,將data中初始化得值顯示在輸入框中;再通過(guò)input事件處理值得變化,使輸入框中新得值覆蓋掉原來(lái)得值。所以,
v-bind得作用使通過(guò)數(shù)據(jù)域(model)得變化導(dǎo)致輸入域(view)層跟著變化;v-on得作用是輸入域(view)層得變化導(dǎo)致數(shù)據(jù)域(model)層跟著發(fā)生變化;這樣就實(shí)現(xiàn)了雙向數(shù)據(jù)綁定。
<!DOCTYPE html><html lang="en"><body> <div id="app"> <input type="text" v-bind:value="msg" v-on:input='handle'> <input type="text" v-bind:value="msg" v-on:input='msg=$event.target.value'> <input type="text" v-model:value="msg"> <div>{{msg}}</div> </div> <script type="text/javascript" src=http://www.sneakeraddict.net/skin/m04blueskin/image/nopic.gif <script type="text/javascript"> var vm = new Vue({ el:'#app', data:{ msg:'hello' }, methods:{ handle:function(event){ this.msg = event.target.value; } } }); </script></body></html>
2、樣式綁定
2.1 class樣式處理
對(duì)象語(yǔ)法:
<div v-bind:class="{warn:isWarn, error:isError,.....}"></div>
完整代碼:
<!DOCTYPE html><html lang="en"><head> <style type="text/css"> .warn { border: 1px solid red; width:100px; height: 50px; } </style></head><body> <div id="app"> <div v-bind:class="{warn:isWarn}">警告提示</div> <button v-on:click="handle">切換</button> </div> <script type="text/javascript" src=http://www.sneakeraddict.net/skin/m04blueskin/image/nopic.gif <script type="text/javascript"> var vm = new Vue({ el:'#app', data:{ isWarn:true }, methods:{ handle:function(){ this.isWarn = !this.isWarn; } } }); </script></body></html>
數(shù)組語(yǔ)法:
<div v-bind:class="[warnClass, errorClass]"></div>
完整樣例:
<!DOCTYPE html><html lang="en"><head> <style type="text/css"> .warn { border: 1px solid red; width:100px; height: 50px; } .error { background-color: yellow; } </style></head><body> <div id="app"> <div v-bind:class="[warnClass, errorClass]">警告提示</div> <button v-on:click="handle">清空樣式</button> </div> <script type="text/javascript" src=http://www.sneakeraddict.net/skin/m04blueskin/image/nopic.gif <script type="text/javascript"> var vm = new Vue({ el:'#app', data:{ warnClass:'warn', errorClass:'error' }, methods:{ handle:function(){ this.warnClass = ''; this.errorClass = ''; } } }); </script></body></html>
class綁定事件得相關(guān)細(xì)節(jié)
對(duì)象語(yǔ)法和數(shù)組語(yǔ)法結(jié)合使用
比如,在以上數(shù)組語(yǔ)法得例子得基礎(chǔ)上加一個(gè)對(duì)象語(yǔ)法
<!DOCTYPE html><html lang="en"><head> <style type="text/css"> .warn { border: 1px solid red; width:100px; height: 50px; } .error { background-color: yellow; } .other { color:blue; } </style></head><body> <div id="app"> <div v-bind:class="[warnClass, errorClass,{other:active}]">警告提示</div> <button v-on:click="handle">清空樣式</button> </div> <script type="text/javascript" src=http://www.sneakeraddict.net/skin/m04blueskin/image/nopic.gif <script type="text/javascript"> var vm = new Vue({ el:'#app', data:{ warnClass:'warn', errorClass:'error', active:true }, methods:{ handle:function(){ this.warnClass = ''; this.errorClass = ''; this.active = false; } } }); </script></body></html>
class綁定得值可以簡(jiǎn)化操作(數(shù)組和對(duì)象形式得),使代碼得可讀性好
<!DOCTYPE html><html lang="en"><head> <style type="text/css"> .warn { border: 1px solid red; width:100px; height: 50px; } .error { background-color: yellow; } .other { color:blue; } </style></head><body> <div id="app"> <div v-bind:class="arrClass">數(shù)組簡(jiǎn)化</div> <div v-bind:class="objClass">對(duì)象簡(jiǎn)化</div> </div> <script type="text/javascript" src=http://www.sneakeraddict.net/skin/m04blueskin/image/nopic.gif <script type="text/javascript"> var vm = new Vue({ el:'#app', data:{ arrClass:['warn','error'], objClass:{ other:true } } }); </script></body></html>
默認(rèn)得class會(huì)被保留,比如以下默認(rèn)得base樣式
<!DOCTYPE html><html lang="en"><head> <style type="text/css"> .warn { border: 1px solid red; width:100px; height: 50px; } .error { background-color: yellow; } .other { color:blue; } .base { font-size: 25px; } </style></head><body> <div id="app"> <div class="base" v-bind:class="arrClass">數(shù)組簡(jiǎn)化</div> </div> <script type="text/javascript" src=http://www.sneakeraddict.net/skin/m04blueskin/image/nopic.gif <script type="text/javascript"> var vm = new Vue({ el:'#app', data:{ arrClass:['warn','error'], } }); </script></body></html>
2.2 style樣式處理(樣式綁定之內(nèi)聯(lián)樣式style)
對(duì)象語(yǔ)法:
<div v-bind:style='{border:borderStyle}'>對(duì)象語(yǔ)法</div>
完整代碼:
<!DOCTYPE html><html lang="en"><head></head><body> <div id="app"> <div v-bind:style='{border:borderStyle,width:widthStyle,height:heightStyle}'>對(duì)象語(yǔ)法</div> </div> <script type="text/javascript" src=http://www.sneakeraddict.net/skin/m04blueskin/image/nopic.gif <script type="text/javascript"> var vm = new Vue({ el:'#app', data:{ borderStyle:'1px solid red', widthStyle:'100px', heightStyle:'100px' } }); </script></body></html>
style對(duì)象語(yǔ)法得簡(jiǎn)寫形式:
<!DOCTYPE html><html lang="en"><head></head><body> <div id="app"> <div v-bind:style='objStyle'>對(duì)象語(yǔ)法簡(jiǎn)寫</div> </div> <script type="text/javascript" src=http://www.sneakeraddict.net/skin/m04blueskin/image/nopic.gif <script type="text/javascript"> var vm = new Vue({ el:'#app', data:{ objStyle:{ border:'1px solid red', width:'100px', height:'100px' } } }); </script></body></html>
數(shù)組語(yǔ)法:
<div v-bind:style='[objStyle,otherStyle]'>數(shù)組語(yǔ)法</div>
完整代碼:
<!DOCTYPE html><html lang="en"><head></head><body> <div id="app"> <div v-bind:style='[objStyle,otherStyle]'>數(shù)組語(yǔ)法</div> </div> <script type="text/javascript" src=http://www.sneakeraddict.net/skin/m04blueskin/image/nopic.gif <script type="text/javascript"> var vm = new Vue({ el:'#app', data:{ objStyle:{ border:'1px solid red', width:'100px', height:'100px' }, otherStyle:{ border:'1px solid red', backgroundColor:'blue' } } }); </script></body></html>