基本指令
v-for v-on v-bind v-text v-if v-else-if v-else v-show v-model v-pre v-cloak v-once
v-on 簡寫 @,@事件名。修飾符 stop 阻止事件冒泡。prevent 阻止默認事件 once 只執行一次。
v-bind 簡寫 :,:屬性,常用于樣式,組件傳值。:style :xxx
樣式可用對象,數組進行配置。:class = "{active:isActive}",isActive 布爾值,true則active添加,false,則active不添加。
v-if 控制dom結構的顯示隱藏,dom結構消失。
v-show 控制dom結構的顯示隱藏,dom結構不消失,相當于display:none;
v-model 常用于 input 輸入框中。修飾符 .trim 首尾空格過濾,.number 轉數字 .lazy 與change事件同步,類似onbulr事件
v-once 只渲染元素或組件一次。dom再次更新時會被當成靜態內容跳過。
生命周期
beforeCreate 周期內,由于未初始化,所以無法獲取data,props數據。created中,可以獲取得到data,props值。mounted后,就可以獲取dom結構。beforceDestroy中,移除事件監聽。
created和mounted中,都可以進行ajax請求,兩者的區別是created頁面視圖未出現,請求信息過多,會長時間白屏。mounted不會承諾所有視圖都出現,可以加載大多數視圖。一般在mounted中請求
Vue.nextTick(),vm.$nextTick() 全局,實例方法
視圖更新后的回調,修改數據后,可獲取更新后的dom,經常來進行 滾動視圖的刷新,輪播視圖的刷新等
Vue.set vm.$set
向響應式對象中添加一個屬性,并確保這個新屬性同樣是響應式的,且觸發視圖更新。它必須用于向響應式對象上添加新屬性,因為 Vue 無法探測普通的新增屬性 (比如 this.myObject.newProperty = 'hi')。
這里執行的的是對象的操作,在vue中,對數組執行 push,pop,shift,unshift,splice,sort,reverse操作,會刷新視圖。使用下標對數組內的某一個具體值進行更新,不會刷新刷圖,可以是用set方法來實現或splice方法實現。
data
vue的數據,可以是對象,可以是函數。在書寫vue的組件時,data必須是一個函數,返回一個對象。
為什么是一個函數而不是一個對象。
當一個組件被定義,data 必須聲明為返回一個初始數據對象的函數,因為組件可能被用來創建多個實例。如果 data 仍然是一個純粹的對象,則所有的實例將共享引用同一個數據對象!通過提供 data函數,每次創建一個新實例后,我們能夠調用 data 函數,從而返回初始數據的一個全新副本數據對象。
props 父子傳值
子組件接受父組件的數據。
props:['a','b']或
props:{
a:{type:String,default:'test'},b:{type:Number,require:true}
}
子=>父 傳值 自定義事件,并觸發
father.js------
<son @passData='fromData'></son> -------- methods:{ formData(dataOne){處理子組件傳回來的數據}}
son.js
事件中觸發 this.$emit('passData',dataOne)
兄弟組件傳值,一般新建一個vue空實例化對象。兄弟通過空實例對象觸發和監聽數據,也是很方便的。但是在實際開發中,通信比較復雜。更多的是使用vuex來進行通訊。
center.js ----- import Vue from 'vue' export default new Vue
a.vue ----- import center from './center.js' 事件中 觸發 center.$emit('send',data)
b.vue ----- import center from './center.js' created 中監聽 center.$on('send',data=>{操作data})
小 tips
center.$emit('send',(data)=>{處理data});
center.$on('send',(cb)=>{cb && cb({數據對象})});
傳遞一個方法,在$on中監聽,在回調函數中執行該方法并可以傳值給該函數。
computed 計算屬性
computed計算屬性和對象的get,set方法類似。對 vm.aPlus 取值,就執行了 get方法。會返回 this.a + 1;對它賦值,就會執行 set 方法,改變 this.a的值。計算屬性會緩存數據,除非數據進行改變。funtion中的this指向vue的實例對象。
watch
基本寫法。a:function(val,oldVal){} // 顯示原值與新值
立刻調用,執行一次。 immediate屬性。監聽整個對象,如有對象的值改變,則新舊值一致。
computed,watch,method,都可以改變data的值。執行順序一般是 computed,watch,methods。computed剛開始加載就會使用到,獲取值,有緩存效果。watch監聽數據,數據改變則執行對應的函數。methods是方法 ,需要主動觸發。大多數情況下,computed已經滿足需要,但是computed不提供set方法,需要你手動添加。使用 watch 選項允許我們執行異步操作(訪問一個 API),限制我們執行該操作的頻率,并在我們得到最終結果前,設置中間狀態。這是計算屬性無法做到的
slot 插槽
常用于父組件向子組件傳遞視圖。也可以寫模板代碼。
具名插槽 子組件 slot 標簽內書寫name 屬性,父組件的標簽書寫同樣的name屬性,就會一一對應。沒有書寫name屬性性,就會默認添加到slot標簽中。
dom結構以子組件的slot為準。
slot可以書寫默認內容,若父組件不傳遞,則顯示默認內容
ref
vue不建議操作dom,那么要獲取到具體的組件的方法或者屬性時,可以用 ref 來獲取,相當于 html標簽中的 id 屬性。可以獲取到當前組件的所有信息或者dom結構。
在方法中可以用 this.$refs.xxx來獲取到想要獲取的組件或者dom結構。
is
is 屬性,常用來動態顯示組件。 <component :is='xxx'></component> xxx為顯示的組件名稱
keep-alive
緩存不活動的組件,不會銷毀。即再次進入的時候,緩存組件的生命周期不會被觸發,但是會觸發 activated 和 deactivated 這兩個生命周期。
key
遍歷時,通常vue會提醒你添加一個key值。這個key值是唯一值,最好使用屬性中不變化的值,例如 item中的id等,性能會好一些。不要使用index下標,如果要遍歷的數據不改變,不過一般這不可能,使用index影響不大。由于虛擬DOM是通過 diff 算法實現的原因,dom結構能夠復用,就會夠減少很多運算,優化性能。key的作用主要是為了高效的更新虛擬DOM。
閱讀大佬文章請移步 為什么使用v-for時必須添加唯一的key? - 掘金
添加全局方法
common.js 書寫方法并 export 出來,在main.js中引入,掛靠在 Vue.prototype.xxx = xxxx 上。組件中就可以使用。
mixins 混入
- 混入 具體可以看官網文檔哈,個人理解是創建一個公共的js文件,可以書寫組件的屬性和方法,生命函數等等。data 將會合并,有沖突的以組件數據優先,生命周期不存在沖突概念,都會執行,以外部優先。像 對象類的值,比如 methods , components , directives 將會合并成同一個對象,若 key 值相同,按照對象合并的原則來合并,后面的 value 值會覆蓋前面的 value 值,即組件的方法會覆蓋 外部的方法。