vue面試常被問到的問題整理


1、Vue的雙向數據綁定原理是什么?

答 : vue是采用數據劫持,並且使用發布-訂閱者的開發模式。原理是觀察者observer通過Object.defineProperty()來劫持到各個屬性的getter setter,在數據變動的時候,會被observer觀察到,會通過Dep通知數據的訂閱者watcher,之后進行相應的視圖上面的變化

具體實現步驟,感興趣的可以看看

第一步:需要observe的數據對象進行遞歸遍歷,包括子屬性對象的屬性,都加上 setter和getter 
這樣的話,給這個對象的某個值賦值,就會觸發setter,那么就能監聽到了數據變化

第二步:compile解析模板指令,將模板中的變量替換成數據,然后初始化渲染頁面視圖,並將每個指令對應的節點綁定更新函數,添加監聽數據的訂閱者,一旦數據有變動,收到通知,更新視圖

第三步:Watcher訂閱者是Observer和Compile之間通信的橋梁,主要做的事情是: 
1、在自身實例化時往屬性訂閱器(dep)里面添加自己 
2、自身必須有一個update()方法 
3、待屬性變動dep.notice()通知時,能調用自身的update()方法,並觸發Compile中綁定的回調,則功成身退。

第四步:MVVM作為數據綁定的入口,整合Observer、Compile和Watcher三者,通過Observer來監聽自己的model數據變化,通過Compile來解析編譯模板指令,最終利用Watcher搭起Observer和Compile之間的通信橋梁,達到數據變化 -> 視圖更新;視圖交互變化(input) -> 數據model變更的雙向綁定效果

2、請詳細說下你對vue生命周期的理解?

答 : 創建前/后,DOM渲染前/后,更新前/后,銷毀前/后; 
對於各個周期的理解: 
創建前/后: 
beforeCreated:此時的vue實例還沒有掛載元素$el,數據對象data也是undefiend; 
created:vue實例的數據對象data有了,但是$el還沒有 
載入前/后: 
beforeMount:vue的實例的$el和data都初始化了,但還是掛載在之前虛擬的DOM節點上面,data.message還未替換 
mounted :vue實例掛載完成,data.message成功渲染。 
更新前/后 
在data發生變化的時候,會觸發beforeUpdate和updated方法。 
銷毀前/后: 
在destiory之后,對data的改變不會再觸發周期函數,說明此時vue實例已經解除了事件監聽以及和dom的綁定,但是dom結構依然存在

3.請說下封裝 vue 組件的過程?

首先,組件可以提升整個項目的開發效率。能夠把頁面抽象成多個相對獨立的模塊,解決了我們傳統項目開發:效率低、難維護、復用性等問題。 
然后,使用Vue.extend方法創建一個組件,然后使用Vue.component方法注冊組件。子組件需要數據,可以在props中接受定義。而子組件修改好數據后,想把數據傳遞給父組件。可以采用emit方法。

4、active-class是哪個組件的屬性?

vue-router模塊的router-link組件。

5、嵌套路由怎么定義?

當有多層組件嵌套的時候,可以考慮嵌套路由實現 
因此我們需要在 VueRouter 的參數中使用 children 配置,這樣就可以很好的實現路由嵌套。 
可能還會問如何實現重定向: 
使用redirect配置

6.怎么定義vue-router的動態路由?怎么獲取傳過來的動態參數?

在router目錄下的index.js文件中,對path屬性加上/:id。 
使用router對象的params.id。

7.vue-router有哪幾種導航鈎子?

三種; 
最常用的是一個全局導航鈎子,router.beforeEach(to,from,next),可以用作路由跳轉前進行判斷攔截 
第二種:組件內的鈎子 
第三種:單獨路由獨享組件

8、scss是什么?在vue.cli中的安裝使用步驟是?有哪幾大特性?

css的預編譯。 
使用步驟: 
第一步:用npm 下三個loader(sass-loader、css-loader、node-sass) 
第二步:在build目錄找到webpack.base.config.js,在那個extends屬性中加一個拓展.scss 
第三步:還是在同一個文件,配置一個module屬性 
第四步:然后在組件的style標簽加上lang屬性 ,例如:lang=”scss”

9、v-model是什么?怎么使用? vue中標簽怎么綁定事件?

可以實現雙向綁定,指令(v-class、v-for、v-if、v-show、v-on)。vue的model層的data屬性。綁定事件:

10、axios是什么?怎么使用?怎么解決跨域的問題

axios:是請求后台資源的模塊; 
因為vue-cli會建立一個服務器,那么本地去用axios請求,會造成跨域;解決方法是通過vue-cli生成的框架的結構目錄下的config/index.js,去配置proxyTable配置項; 
詳情可參照:https://blog.csdn.net/qq_33559304/article/details/72966028

11.vuex是什么?怎么使用?哪種功能場景使用它?

vue框架中狀態管理。在main.js引入store,注入。新建了一個目錄store,….. export 。場景有:單頁應用中,組件之間的狀態。音樂播放、登錄狀態、加入購物車

12.vuex的store有幾個屬性值?

state、mutations、actions、getters四個屬性值


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM