面經之vue

基本指令


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再次更新時會被當成靜態內容跳過。

生命周期


image

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方法實現。

image
image
image

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的實例對象。

image

watch


基本寫法。a:function(val,oldVal){} // 顯示原值與新值

立刻調用,執行一次。 immediate屬性。監聽整個對象,如有對象的值改變,則新舊值一致。

computed,watch,method,都可以改變data的值。執行順序一般是 computed,watch,methods。computed剛開始加載就會使用到,獲取值,有緩存效果。watch監聽數據,數據改變則執行對應的函數。methods是方法 ,需要主動觸發。大多數情況下,computed已經滿足需要,但是computed不提供set方法,需要你手動添加。使用 watch 選項允許我們執行異步操作(訪問一個 API),限制我們執行該操作的頻率,并在我們得到最終結果前,設置中間狀態。這是計算屬性無法做到的

image

slot 插槽


常用于父組件向子組件傳遞視圖。也可以寫模板代碼。

具名插槽 子組件 slot 標簽內書寫name 屬性,父組件的標簽書寫同樣的name屬性,就會一一對應。沒有書寫name屬性性,就會默認添加到slot標簽中。

dom結構以子組件的slot為準。

image
image

slot可以書寫默認內容,若父組件不傳遞,則顯示默認內容

image
image

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 值,即組件的方法會覆蓋 外部的方法。
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • vue概述 在官方文檔中,有一句話對Vue的定位說的很明確:Vue.js 的核心是一個允許采用簡潔的模板語法來聲明...
    li4065閱讀 7,270評論 0 25
  • 這篇筆記主要包含 Vue 2 不同于 Vue 1 或者特有的內容,還有我對于 Vue 1.0 印象不深的內容。關于...
    云之外閱讀 5,074評論 0 29
  • 主要還是自己看的,所有內容來自官方文檔。 介紹 Vue.js 是什么 Vue (讀音 /vju?/,類似于 vie...
    Leonzai閱讀 3,375評論 0 25
  • Vue 實例 屬性和方法 每個 Vue 實例都會代理其 data 對象里所有的屬性:var data = { a:...
    云之外閱讀 2,241評論 0 6
  • VUE介紹 Vue的特點構建用戶界面,只關注View層簡單易學,簡潔、輕量、快速漸進式框架 框架VS庫庫,是一封裝...
    多多醬_DuoDuo_閱讀 2,733評論 1 17