面試問題解答##
vue傳值匯總###
父子傳值:
父組件: 在引用子組件的時候輸入 :傳值名稱="傳遞數(shù)值"
子組件: 在javaScript中 poprs:['傳值名稱']
中央事件總線傳值:
首先建立事件bus,我會新建一個bus.js文件怔匣;注冊bus。
分別在組件中使用emit和on實現(xiàn)數(shù)據(jù)之間的通信傅联;
發(fā)送方: Bus.$emit('傳值名稱',傳值數(shù)值,傳遞數(shù)值) //注意:此處可以傳遞多個數(shù)值授霸;
接收方: Bus.$on('傳值名稱',接收方法(傳值數(shù)值,傳遞數(shù)值))
vuex傳值:
新建vuex.store;
簡單的應(yīng)用
state (全局變量的數(shù)據(jù))
getters (用來獲取數(shù)據(jù)的方法)
actions (跟后臺接口打交道的方法)
mutations (存儲數(shù)據(jù)的方法)
路由傳值:
在設(shè)置路由的時候加袋,正常路徑后面加上要傳遞值的字段:
如當(dāng)要傳遞一個projetId時:
設(shè)置: path: '/pending-particulars/:projectId',
傳遞: this.$router.push({path:'/pending-particulars/'+data.id});
接收: this.projectId = this.$route.params.projectId;
用params傳遞:
設(shè)置: path: '/Describe',
傳遞: this.$router.push({path: 'Describe',params: {projectId: projectId}})
接收: this.projectId =$route.params.projectId
用query傳遞:
設(shè)置: path: '/Describe',
傳遞: this.$router.push({path: 'Describe',query: {projectId: projectId}})
接收: this.projectId =$route.query.projectId
盒子居中###
flex布局:
定位加margin: 利用css的 position屬性盯蝴,大小盒子子絕父相毅哗,然后小盒子top,right,bottom,left全部設(shè)置為0,然后margin :auto结洼,自動對齊
定位:利用css的 position屬性黎做,把div2相對于div1的top、left都設(shè)置為50%松忍,然后再用margin-top設(shè)置為div2的高度的負(fù)一半拉回來蒸殿,用marg-left設(shè)置為寬度的負(fù)一半拉回來
margin : 大盒子的寬減去小盒子的寬除以二就是小盒子margin-left的數(shù)值,大盒子的高減去小盒子的高除以二就是小盒子margin-top的數(shù)值鸣峭;
css3新特性:利用css3的新增屬性table-cell, vertical-align:middle;
箭頭函數(shù)this
箭頭函數(shù)中的this宏所,指向與一般function定義的函數(shù)不同,箭頭函數(shù)this的定義:箭頭函數(shù)中的this是在定義函數(shù)的時候綁定摊溶,而不是在執(zhí)行函數(shù)的時候綁定爬骤。
vue聲明周期
創(chuàng)建期間的生命周期函數(shù):
beforeCreate:實例剛在內(nèi)存中被創(chuàng)建出來,此時莫换,還沒有初始化好 data 和 methods 屬性
created:實例已經(jīng)在內(nèi)存中創(chuàng)建OK霞玄,此時 data 和 methods 已經(jīng)創(chuàng)建OK骤铃,此時還沒有開始 編譯模板
beforeMount:此時已經(jīng)完成了模板的編譯,但是還沒有掛載到頁面中
mounted:此時坷剧,已經(jīng)將編譯好的模板惰爬,掛載到了頁面指定的容器中顯示
運行期間的生命周期函數(shù):
beforeUpdate:狀態(tài)更新之前執(zhí)行此函數(shù), 此時 data 中的狀態(tài)值是最新的惫企,但是界面上顯示的 數(shù)據(jù)還是舊的撕瞧,因為此時還沒有開始重新渲染DOM節(jié)點
updated:實例更新完畢之后調(diào)用此函數(shù),此時 data 中的狀態(tài)值 和 界面上顯示的數(shù)據(jù)狞尔,都已經(jīng)完成了更新丛版,界面已經(jīng)被重新渲染好了!
銷毀期間的生命周期函數(shù):
beforeDestroy:實例銷毀之前調(diào)用偏序。在這一步页畦,實例仍然完全可用。
destroyed:Vue 實例銷毀后調(diào)用禽车。調(diào)用后寇漫,Vue 實例指示的所有東西都會解綁定刊殉,所有的事件監(jiān)聽器會被移除殉摔,所有的子實例也會被銷毀。
常用的偽類
:link 用這個可以設(shè)置未被訪問的鏈接的樣式
:visited 用這個設(shè)置已經(jīng)被訪問的鏈接的樣式
:hover 用于設(shè)置將鼠標(biāo)懸浮在鏈接上的樣式
:active 用于設(shè)置鼠標(biāo)點擊鏈接時到鼠標(biāo)松開時的樣式
:focus 用于設(shè)置用鍵盤將焦點放在鏈接上時的樣式(如用tab鍵或者上下鍵來移動頁面焦點時)
:before和:after 在指定的元素內(nèi)容(而不是元素本身)之前或者之后插入一個包含content屬性指定內(nèi)容的行內(nèi)元素记焊;
數(shù)據(jù)類型及其分類
數(shù)據(jù)類型分為兩種基礎(chǔ)類型和引用類型:
- 基礎(chǔ)類型:像Number逸月、String、Boolean等這種為基本類型
- 引用類型:Object和Array
基本類型值:基本類型值指的是存儲在棧中的一些簡單的數(shù)據(jù)段
在JavaScript中基本數(shù)據(jù)類型有String,Number,Undefined,Null,Boolean遍膜,在ES6中碗硬,又定義了一種新的基本數(shù)據(jù)類型Symbol,所以一共有6種
引用類型值:引用類型值是引用類型的實例,它是保存在堆內(nèi)存中的一個對象瓢颅,引用類型是一種數(shù)據(jù)結(jié)構(gòu)恩尾,最常用的是Object,Array,Function類型,另外還有Date,RegExp,Error等挽懦,ES6同樣也提供了Set,Map2種新的數(shù)據(jù)結(jié)構(gòu)引用類型值
引用類型值是引用類型的實例翰意,它是保存在堆內(nèi)存中的一個對象,引用類型是一種數(shù)據(jù)結(jié)構(gòu)信柿,最常用的是Object,Array,Function類型冀偶,另外還有Date,RegExp,Error等,ES6同樣也提供了Set,Map2種新的數(shù)據(jù)結(jié)構(gòu)
深拷貝與淺拷貝
淺拷貝只是復(fù)制了對象的引用地址渔嚷,兩個對象指向同一個內(nèi)存地址进鸠,所以修改其中任意的值,另一個值都會隨之變化形病,這就是淺拷貝(例:assign())
創(chuàng)建一個新對象客年,這個對象有著原始對象屬性值的一份精確拷貝霞幅。如果屬性是基本類型,拷貝的就是基本類型的值量瓜,如果屬性是引用類型蝗岖,拷貝的就是內(nèi)存地址 ,所以如果其中一個對象改變了這個地址榔至,就會影響到另一個對象抵赢。
深拷貝是將對象及值復(fù)制過來,兩個對象修改其中任意的值另一個值不會改變唧取,這就是深拷貝(例:JSON.parse()和JSON.stringify()铅鲤,但是此方法無法復(fù)制函數(shù)類型)
將一個對象從內(nèi)存中完整的拷貝一份出來,從堆內(nèi)存中開辟一個新的區(qū)域存放新對象,且修改新對象不會影響原對象