一、v-model指令和修飾符:
1.v-model指令雙向綁定的注意事項(xiàng):
(1)伺通、v-model指令默認(rèn)觸發(fā)的是input事件箍土,當(dāng)文本框的值發(fā)生變化后,立刻同步給數(shù)據(jù)
(2)罐监、?v-model綁定一組單選框吴藻,每個(gè)單選框指定相同的屬性
(3)弓柱、v-model綁定單個(gè)復(fù)選框,綁定一個(gè)boolean值? ?v-model綁定多個(gè)復(fù)選框,綁定同一個(gè)數(shù)組
(4)沟堡、單選菜單?綁定一個(gè)屬性? ?多選菜單?綁定一個(gè)數(shù)組
2.修飾符:
.lazy-----可以將input事件轉(zhuǎn)換為change事件
.trim-----用于去掉內(nèi)容首尾的空格
<input?type="text"?v-model.lazy.trim='name'>{{name}}
通過(guò)修飾符.lazy 表單中本來(lái)因?yàn)殡p向綁定而同步變化的value和data中的name屬性會(huì)在離開(kāi)input表單窗口后再同步
.number-----用于將字符串轉(zhuǎn)為數(shù)字?
<input?type="text"?v-model.number='age'>
data中的age傳過(guò)來(lái)的數(shù)字是字符串的形式 加上.number后就又是數(shù)字了 可以進(jìn)行運(yùn)算
二侧但、綁定事件、事件修飾符:
1.v-on: 縮寫(xiě)是@ 綁定事件的注意事項(xiàng):
解釋以下就是當(dāng)綁定了事件后對(duì)方法不穿參數(shù)航罗,那么就會(huì)默認(rèn)傳一個(gè)事件對(duì)象 e 進(jìn)去
可以通過(guò)console.log(e)來(lái)查看
如果傳了參數(shù)那么方法在運(yùn)行時(shí)就會(huì)接收到這個(gè)參數(shù)
比如在上述代碼中 運(yùn)行sayHello方法時(shí)會(huì)有個(gè)? hello? 出現(xiàn)
$event 參數(shù) 就是事件對(duì)象
2.綁定樣式行內(nèi)式寫(xiě)法:
3.事件修飾符:
(1)、.stop修飾符粥血,用于阻止事件冒泡? ?子盒子的事件不會(huì)傳給父盒子
? ? ? ? ? ? ?等同于在方法中寫(xiě)? e.stopPropagation();//阻止事件冒泡
(2)柏锄、.prevent修飾符,用于阻止默認(rèn)行為
? ? ? ? ? ? ?等同于在方法中寫(xiě)? e.preventDefault();//阻止默認(rèn)事件
(3)复亏、.once修飾符趾娃,用于只綁定一次事件方法(只能調(diào)用一次?后面在點(diǎn)擊就無(wú)效了)
(4)、.self修飾符蜓耻,只能在自身元素上觸發(fā)茫舶,不能在子元素身上觸發(fā)
? ? ? ? ? ? ? 這個(gè)有點(diǎn)類(lèi)似于冒泡,區(qū)別在于這個(gè)是 父盒子的事件不會(huì)在點(diǎn)擊子盒子時(shí)觸發(fā)
三刹淌、深度響應(yīng)式和按鍵修飾符:
1.按鍵修飾符:
Vue針對(duì)鍵盤(pán)事件饶氏,提供了按鍵修飾符。
一共有9個(gè)按鍵修飾符有勾,分別是:
.enter?是回車(chē)鍵
.tab?是tab鍵?
.delete?是刪除鍵和退格鍵????????
.esc?是退出鍵???????
?.space?是空格鍵????????
.up?是上箭頭????????
.down?是下箭頭????????
.left?是左箭頭????????
.right?是右箭頭
2.深度響應(yīng)式:
根據(jù)圖中的代碼進(jìn)行一步步分析
(1)蔼卡、addSex()方法中喊崖,使用 this.obj.sex ='男' 來(lái)給data中的obj對(duì)象增加屬性。
這樣添加的屬性不會(huì)采用Object.defineProperties去封裝雇逞,所以荤懂,就失去了響應(yīng)式。
所以對(duì)data中的obj有影響但是對(duì)頁(yè)面沒(méi)有影響塘砸,頁(yè)面不會(huì)更新节仿。
通過(guò)$set方法? ?this.$set(this.obj,'sex','男')? 可以給對(duì)象添加響應(yīng)式屬性。
(2)掉蔬、delAge()方法與上述同理
delete?this.obj.age? 刪除obj中的age屬性 并沒(méi)有響應(yīng)式 所以頁(yè)面不會(huì)刷新
而通過(guò)$delete方法? ? this.$delete(this.obj,'age')廊宪,刪除對(duì)象的屬性,并觸發(fā)響應(yīng)式
(3)女轿、addArr()方法是要給data中的arr數(shù)組添加元素
this.arr[5]=66 這個(gè)方法不觸發(fā)頁(yè)面更新
特別注意:
在vue中箭启,操作數(shù)組,并觸發(fā)頁(yè)面更新只能使用數(shù)組的以下方法: push(),pop () ,unshift () ,shift () ,splice () ,reverse () ,sort ()
所以:
this.arr.push(66)? ?和? ?this.$set(this.arr,5,66)? ?
這兩個(gè)方法其實(shí)都可以在改變數(shù)據(jù)的同時(shí)刷新頁(yè)面
(4)蛉迹、delArr()方法刪除arr數(shù)組中的第三位(下標(biāo)為2)用splice截取一位
this.arr.splice(2,1)? ?和? ?this.$delete(this.arr,2)? ?就同上傅寡,都能夠在改變數(shù)據(jù)的同時(shí)刷新頁(yè)面
四、深度響應(yīng)式小練習(xí):
截圖有點(diǎn)麻煩直接上代碼了 大致意思就是通過(guò)this.$set()方法和this.$delete()方法給data中的對(duì)象添加及刪除屬性和屬性值
<body>
????<div?id="app">
????????<div>
????????????{{obj}}
????????</div>
????????<div>
???????????屬性:<input?type="text"?v-model='key'>?
????????</div>
????????<div>
??????????屬性值:<input?type="text"?v-model='value'>??
????????</div>
????????<div>
????????????<button?@click='add'>添加屬性</button>
????????</div>
????????<div>
??????????屬性:<input?type="text"?v-model='key2'>??
????????</div>
????????<button?@click='del'>刪除屬性</button>
????</div>
????<script?src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.14/vue.js"></script>
????<script>
????????new?Vue({
????????????el:'#app',
????????????data:{
????????????????obj:{
????????????????},
????????????????key:'',
????????????????value:'',
????????????????key2:''
????????????},
????????????methods:{
????????????????add(){
????????????????????//設(shè)置的效果為添加或者修改?如果對(duì)象沒(méi)有這個(gè)屬性?就添加?如果有?就修改
????????????????????//設(shè)置obj對(duì)象的key屬性值為value
????????????????????this.$set(this.obj,this.key,this.value)
????????????????},
????????????????del(){
????????????????????this.$delete(this.obj,this.key2)
????????????????}
????????????}
????????})
????</script>
</body>