for vue 一行2列_vue常见面试题汇总
點(diǎn)擊“卓躍教育”,選擇“星標(biāo)?”
在看|星標(biāo)|留言,? 真愛
今天跟大家分享下Vue常見面試題的知識(shí)。
1.vue優(yōu)點(diǎn)?答:輕量級(jí)框架:只關(guān)注視圖層,是一個(gè)構(gòu)建數(shù)據(jù)的視圖集合,大小只有幾十kb;
簡單易學(xué):國人開發(fā),中文文檔,不存在語言障礙 ,易于理解和學(xué)習(xí);
雙向數(shù)據(jù)綁定:保留了angular的特點(diǎn),在數(shù)據(jù)操作方面更為簡單;
組件化:保留了react的優(yōu)點(diǎn),實(shí)現(xiàn)了html的封裝和重用,在構(gòu)建單頁面應(yīng)用方面有著獨(dú)特的優(yōu)勢(shì);
視圖,數(shù)據(jù),結(jié)構(gòu)分離:使數(shù)據(jù)的更改更為簡單,不需要進(jìn)行邏輯代碼的修改,只需要操作數(shù)據(jù)就能完成相關(guān)操作;
虛擬DOM:dom操作是非常耗費(fèi)性能的, 不再使用原生的dom操作節(jié)點(diǎn),極大解放dom操作,但具體操作的還是dom不過是換了另一種方式;
運(yùn)行速度更快:相比較與react而言,同樣是操作虛擬dom,就性能而言,vue存在很大的優(yōu)勢(shì)。
答:通過props。
3.子組件像父組件傳遞事件?答:$emit方法。4.v-show和v-if指令的共同點(diǎn)和不同點(diǎn)?答: 共同點(diǎn):都能控制元素的顯示和隱藏;不同點(diǎn):實(shí)現(xiàn)本質(zhì)方法不同,v-show本質(zhì)就是通過控制css中的display設(shè)置為none,控制隱藏,只會(huì)編譯一次;v-if是動(dòng)態(tài)的向DOM樹內(nèi)添加或者刪除DOM元素,若初始值為false,就不會(huì)編譯了。而且v-if不停的銷毀和創(chuàng)建比較消耗性能。
總結(jié):如果要頻繁切換某節(jié)點(diǎn),使用v-show(切換開銷比較小,初始開銷較大)。如果不需要頻繁切換某節(jié)點(diǎn)使用v-if(初始渲染開銷較小,切換開銷比較大)。5.如何讓CSS只在當(dāng)前組件中起作用?
答:在組件中的style前面加上scoped6.的作用是什么?
答:keep-alive 是 Vue 內(nèi)置的一個(gè)組件,可以使被包含的組件保留狀態(tài),或避免重新渲染。7.如何獲取dom?
答:ref="domName" 用法:this.$refs.domName8.說出幾種vue當(dāng)中的指令和它的用法?
答:v-model雙向數(shù)據(jù)綁定;
v-for循環(huán);
v-if v-show 顯示與隱藏;
v-on事件;v-once: 只綁定一次。9. vue-loader是什么?使用它的用途有哪些?
答:vue文件的一個(gè)加載器,將template/js/style轉(zhuǎn)換成js模塊。
用途:js可以寫es6、style樣式可以scss或less、template可以加jade等10.為什么使用key?答:需要使用key來給每個(gè)節(jié)點(diǎn)做一個(gè)唯一標(biāo)識(shí),Diff算法就可以正確的識(shí)別此節(jié)點(diǎn)。作用主要是為了高效的更新虛擬DOM。11.axios及安裝?答:請(qǐng)求后臺(tái)資源的模塊。npm install axios --save裝好,js中使用import進(jìn)來,然后.get或.post。返回在.then函數(shù)中如果成功,失敗則是在.catch函數(shù)中。12.v-model的使用。答:v-model用于表單數(shù)據(jù)的雙向綁定,其實(shí)它就是一個(gè)語法糖,這個(gè)背后就做了兩個(gè)操作:v-bind綁定一個(gè)value屬性;v-on指令給當(dāng)前元素綁定input事件。13.請(qǐng)說出vue.cli項(xiàng)目中src目錄每個(gè)文件夾和文件的用法?答:assets文件夾是放靜態(tài)資源;components是放組件;router是定義路由相關(guān)的配置; app.vue是一個(gè)應(yīng)用主組件;main.js是入口文件。14.分別簡述computed和watch的使用場景答:computed:當(dāng)一個(gè)屬性受多個(gè)屬性影響的時(shí)候就需要用到computed最典型的栗子:購物車商品結(jié)算的時(shí)候watch:當(dāng)一條數(shù)據(jù)影響多條數(shù)據(jù)的時(shí)候就需要用watch栗子:搜索數(shù)據(jù)15.v-on可以監(jiān)聽多個(gè)方法嗎?答:可以,栗子:。16.$nextTick的使用答:當(dāng)你修改了data的值然后馬上獲取這個(gè)dom元素的值,是不能獲取到更新后的值,你需要使用$nextTick這個(gè)回調(diào),讓修改后的data值渲染更新到dom元素之后在獲取,才能成功。17.vue組件中data為什么必須是一個(gè)函數(shù)?答:因?yàn)镴avaScript的特性所導(dǎo)致,在component中,data必須以函數(shù)的形式存在,不可以是對(duì)象。組建中的data寫成一個(gè)函數(shù),數(shù)據(jù)以函數(shù)返回值的形式定義,這樣每次復(fù)用組件的時(shí)候,都會(huì)返回一份新的data,相當(dāng)于每個(gè)組件實(shí)例都有自己私有的數(shù)據(jù)空間,它們只負(fù)責(zé)各自維護(hù)的數(shù)據(jù),不會(huì)造成混亂。而單純的寫成對(duì)象形式,就是所有的組件實(shí)例共用了一個(gè)data,這樣改一個(gè)全都改了。18.漸進(jìn)式框架的理解答:主張最少;可以根據(jù)不同的需求選擇不同的層級(jí);19.Vue中雙向數(shù)據(jù)綁定是如何實(shí)現(xiàn)的?答:vue 雙向數(shù)據(jù)綁定是通過 數(shù)據(jù)劫持 結(jié)合 發(fā)布訂閱模式的方式來實(shí)現(xiàn)的, 也就是說數(shù)據(jù)和視圖同步,數(shù)據(jù)發(fā)生變化,視圖跟著變化,視圖變化,數(shù)據(jù)也隨之發(fā)生改變;核心:關(guān)于VUE雙向數(shù)據(jù)綁定,其核心是 Object.defineProperty()方法。20.單頁面應(yīng)用和多頁面應(yīng)用區(qū)別及優(yōu)缺點(diǎn)答:單頁面應(yīng)用(SPA),通俗一點(diǎn)說就是指只有一個(gè)主頁面的應(yīng)用,瀏覽器一開始要加載所有必須的 html, js, css。所有的頁面內(nèi)容都包含在這個(gè)所謂的主頁面中。但在寫的時(shí)候,還是會(huì)分開寫(頁面片段),然后在交互的時(shí)候由路由程序動(dòng)態(tài)載入,單頁面的頁面跳轉(zhuǎn),僅刷新局部資源。多應(yīng)用于pc端。多頁面(MPA),就是指一個(gè)應(yīng)用中有多個(gè)頁面,頁面跳轉(zhuǎn)時(shí)是整頁刷新單頁面的優(yōu)點(diǎn):用戶體驗(yàn)好,快,內(nèi)容的改變不需要重新加載整個(gè)頁面,基于這一點(diǎn)spa對(duì)服務(wù)器壓力較小;前后端分離;頁面效果會(huì)比較炫酷(比如切換頁面內(nèi)容時(shí)的專場動(dòng)畫)。單頁面缺點(diǎn):不利于seo;導(dǎo)航不可用,如果一定要導(dǎo)航需要自行實(shí)現(xiàn)前進(jìn)、后退。(由于是單頁面不能用瀏覽器的前進(jìn)后退功能,所以需要自己建立堆棧管理);初次加載時(shí)耗時(shí)多;頁面復(fù)雜度提高很多。21.v-if和v-for的優(yōu)先級(jí)答:當(dāng) v-if 與 v-for 一起使用時(shí),v-for 具有比 v-if 更高的優(yōu)先級(jí),這意味著 v-if 將分別重復(fù)運(yùn)行于每個(gè) v-for 循環(huán)中。所以,不推薦v-if和v-for同時(shí)使用。如果v-if和v-for一起用的話,vue中的的會(huì)自動(dòng)提示v-if應(yīng)該放到外層去。22.assets和static的區(qū)別答:相同點(diǎn):assets和static兩個(gè)都是存放靜態(tài)資源文件。項(xiàng)目中所需要的資源文件圖片,字體圖標(biāo),樣式文件等都可以放在這兩個(gè)文件下,這是相同點(diǎn)?不相同點(diǎn):assets中存放的靜態(tài)資源文件在項(xiàng)目打包時(shí),也就是運(yùn)行npm run build時(shí)會(huì)將assets中放置的靜態(tài)資源文件進(jìn)行打包上傳,所謂打包簡單點(diǎn)可以理解為壓縮體積,代碼格式化。而壓縮后的靜態(tài)資源文件最終也都會(huì)放置在static文件中跟著index.html一同上傳至服務(wù)器。static中放置的靜態(tài)資源文件就不會(huì)要走打包壓縮格式化等流程,而是直接進(jìn)入打包好的目錄,直接上傳至服務(wù)器。因?yàn)楸苊饬藟嚎s直接進(jìn)行上傳,在打包時(shí)會(huì)提高一定的效率,但是static中的資源文件由于沒有進(jìn)行壓縮等操作,所以文件的體積也就相對(duì)于assets中打包后的文件提交較大點(diǎn)。在服務(wù)器中就會(huì)占據(jù)更大的空間。建議:將項(xiàng)目中template需要的樣式文件js文件等都可以放置在assets中,走打包這一流程。減少體積。而項(xiàng)目中引入的第三方的資源文件如iconfoont.css等文件可以放置在static中,因?yàn)檫@些引入的第三方文件已經(jīng)經(jīng)過處理,我們不再需要處理,直接上傳。23.vue常用的修飾符答:.stop:等同于JavaScript中的event.stopPropagation(),防止事件冒泡;.prevent:等同于JavaScript中的event.preventDefault(),防止執(zhí)行預(yù)設(shè)的行為(如果事件可取消,則取消該事件,而不停止事件的進(jìn)一步傳播);.capture:與事件冒泡的方向相反,事件捕獲由外到內(nèi);.self:只會(huì)觸發(fā)自己范圍內(nèi)的事件,不包含子元素;.once:只會(huì)觸發(fā)一次。24.vue的兩個(gè)核心點(diǎn)答:數(shù)據(jù)驅(qū)動(dòng)、組件系統(tǒng)數(shù)據(jù)驅(qū)動(dòng):ViewModel,保證數(shù)據(jù)和視圖的一致性。組件系統(tǒng):應(yīng)用類UI可以看作全部是由組件樹構(gòu)成的。25.vue和jQuery的區(qū)別答:jQuery是使用選擇器($)選取DOM對(duì)象,對(duì)其進(jìn)行賦值、取值、事件綁定等操作,其實(shí)和原生的HTML的區(qū)別只在于可以更方便的選取和操作DOM對(duì)象,而數(shù)據(jù)和界面是在一起的。比如需要獲取label標(biāo)簽的內(nèi)容:$("lable").val();,它還是依賴DOM元素的值。?Vue則是通過Vue對(duì)象將數(shù)據(jù)和View完全分離開來了。對(duì)數(shù)據(jù)進(jìn)行操作不再需要引用相應(yīng)的DOM對(duì)象,可以說數(shù)據(jù)和View是分離的,他們通過Vue對(duì)象這個(gè)vm實(shí)現(xiàn)相互的綁定。這就是傳說中的MVVM。26. 引進(jìn)組件的步驟答: 在template中引入組件;在script的第一行用import引入路徑;用component中寫上組件名稱。27.delete和Vue.delete刪除數(shù)組的區(qū)別答:delete只是被刪除的元素變成了 empty/undefined 其他的元素的鍵值還是不變。Vue.delete 直接刪除了數(shù)組 改變了數(shù)組的鍵值。28.SPA首屏加載慢如何解決答:安裝動(dòng)態(tài)懶加載所需插件;使用CDN資源。29.Vue-router跳轉(zhuǎn)和location.href有什么區(qū)別答:使用location.href='/url'來跳轉(zhuǎn),簡單方便,但是刷新了頁面;使用history.pushState('/url'),無刷新頁面,靜態(tài)跳轉(zhuǎn);引進(jìn)router,然后使用router.push('/url')來跳轉(zhuǎn),使用了diff算法,實(shí)現(xiàn)了按需加載,減少了dom的消耗。其實(shí)使用router跳轉(zhuǎn)和使用history.pushState()沒什么差別的,因?yàn)関ue-router就是用了history.pushState(),尤其是在history模式下。30. vue slot答:簡單來說,假如父組件需要在子組件內(nèi)放一些DOM,那么這些DOM是顯示、不顯示、在哪個(gè)地方顯示、如何顯示,就是slot分發(fā)負(fù)責(zé)的活。31.你們vue項(xiàng)目是打包了一個(gè)js文件,一個(gè)css文件,還是有多個(gè)文件?答:根據(jù)vue-cli腳手架規(guī)范,一個(gè)js文件,一個(gè)CSS文件。32.Vue里面router-link在電腦上有用,在安卓上沒反應(yīng)怎么解決?答:Vue路由在Android機(jī)上有問題,babel問題,安裝babel polypill插件解決。33.Vue2中注冊(cè)在router-link上事件無效解決方法答:使用@click.native。原因:router-link會(huì)阻止click事件,.native指直接監(jiān)聽一個(gè)原生事件。34.RouterLink在IE和Firefox中不起作用(路由不跳轉(zhuǎn))的問題答: 方法一:只用a標(biāo)簽,不適用button標(biāo)簽;方法二:使用button標(biāo)簽和Router.navigate方法35.axios的特點(diǎn)有哪些?
答:從瀏覽器中創(chuàng)建XMLHttpRequests;node.js創(chuàng)建http請(qǐng)求;支持Promise API;攔截請(qǐng)求和響應(yīng);轉(zhuǎn)換請(qǐng)求數(shù)據(jù)和響應(yīng)數(shù)據(jù);取消請(qǐng)求;自動(dòng)換成json。axios中的發(fā)送字段的參數(shù)是data跟params兩個(gè),兩者的區(qū)別在于params是跟請(qǐng)求地址一起發(fā)送的,data的作為一個(gè)請(qǐng)求體進(jìn)行發(fā)送params一般適用于get請(qǐng)求,data一般適用于post put 請(qǐng)求。36.請(qǐng)說下封裝 vue 組件的過程?答:1. 建立組件的模板,先把架子搭起來,寫寫樣式,考慮好組件的基本邏輯。(os:思考1小時(shí),碼碼10分鐘,程序猿的準(zhǔn)則。)2. 準(zhǔn)備好組件的數(shù)據(jù)輸入。即分析好邏輯,定好 props 里面的數(shù)據(jù)、類型。3. 準(zhǔn)備好組件的數(shù)據(jù)輸出。即根據(jù)組件邏輯,做好要暴露出來的方法。4. 封裝完畢了,直接調(diào)用即可37.params和query的區(qū)別答:用法:query要用path來引入,params要用name來引入,接收參數(shù)都是類似的,分別是this.$route.query.name和this.$route.params.name。url地址顯示:query更加類似于我們ajax中g(shù)et傳參,params則類似于post,說的再簡單一點(diǎn),前者在瀏覽器地址欄中顯示參數(shù),后者則不顯示注意點(diǎn):query刷新不會(huì)丟失query里面的數(shù)據(jù)params刷新 會(huì) 丟失 params里面的數(shù)據(jù)。38.vue初始化頁面閃動(dòng)問題答:使用vue開發(fā)時(shí),在vue初始化之前,由于div是不歸vue管的,所以我們寫的代碼在還沒有解析的情況下會(huì)容易出現(xiàn)花屏現(xiàn)象,看到類似于{{message}}的字樣,雖然一般情況下這個(gè)時(shí)間很短暫,但是我們還是有必要讓解決這個(gè)問題的。首先:在css里加上[v-cloak] {display: none;}。如果沒有徹底解決問題,則在根元素加上style="display: none;" :style="{display: 'block'}"39.vue更新數(shù)組時(shí)觸發(fā)視圖更新的方法答:push();pop();shift();unshift();splice();sort();reverse()40.vue常用的UI組件庫答:Mint UI,element,VUX41.vue修改打包后靜態(tài)資源路徑的修改答:cli2版本:將 config/index.js 里的 assetsPublicPath 的值改為 './' 。build: {...assetsPublicPath: './',...?}cli3版本:在根目錄下新建vue.config.js 文件,然后加上以下內(nèi)容:(如果已經(jīng)有此文件就直接修改)module.exports = {publicPath: '', // 相對(duì)于 HTML 頁面(目錄相同) }
總結(jié)
以上是生活随笔為你收集整理的for vue 一行2列_vue常见面试题汇总的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2.4g和5g要不要合并_2.4 序列之
- 下一篇: vue移动端下拉切换页面_Vue实现移动