關於vue 常見面試題 (二) (賊全,一般人我不告訴他 )

1、vue-loader是什麼?使用它的用途有哪些?

答:
vue-loader是 webpack 的一個 loader,用於處理 後綴爲 .vue文件,它只是一個讓瀏覽器認識.vue文件的工具
用途:js可以寫es6、style樣式可以scss或less、template可以加jade等

2、請說出vue.cli項目中src目錄每個文件夾和文件的用法?

assets文件夾是放靜態資源;
components是放組件;
router是定義路由相關的配置;view視圖;
app.vue是一個應用主組件;
main.js是入口文件

3、對於MVVM的理解?

MVVM 是 Model-View-ViewModel 的縮寫

Model代表數據模型,也可以在Model中定義數據修改和操作的業務邏輯。
View代表UI 組件,它負責將數據模型轉化成UI 展現出來。
ViewModel監聽模型數據的改變和控制視圖行爲、處理用戶交互,簡單理解就是一個同步View 和 Model的對象,連接Model和View。

在MVVM架構下,View 和 Model 之間並沒有直接的聯繫,而是通過ViewModel進行交互,Model 和 ViewModel 之間的交互是雙向的, 因此View 數據的變化會同步到Model中,而Model 數據的變化也會立即反應到View 上
ViewModel 通過雙向數據綁定把 View 層和 Model 層連接了起來,而View 和 Model 之間的同步工作完全是自動的,無需人爲干涉,因此開發者只需關注業務邏輯,不需要手動操作DOM, 不需要關注數據狀態的同步問題,複雜的數據狀態維護完全由 MVVM 來統一管理。

4、vue優點?

答:
輕量級框架:只關注視圖層,是一個構建數據的視圖集合,大小隻有幾十kb;

簡單易學:國人開發,中文文檔,不存在語言障礙 ,易於理解和學習;

雙向數據綁定:保留了angular的特點,在數據操作方面更爲簡單;

組件化:保留了react的優點,實現了html的封裝和重用,在構建單頁面應用方面有着獨特的優勢;

視圖,數據,結構分離:使數據的更改更爲簡單,不需要進行邏輯代碼的修改,只需要操作數據就能完成相關操作;

虛擬DOM:dom操作是非常耗費性能的, 不再使用原生的dom操作節點,極大解放dom操作,但具體操作的還是dom不過是換了另一種方式;

運行速度更快:相比較與react而言,同樣是操作虛擬dom,就性能而言,vue存在很大的優勢。

5、分別簡述computed和watch的使用場景

答:
computed:
    當一個屬性受多個屬性影響的時候就需要用到computed
    最典型的栗子: 購物車商品結算的時候
watch:
    當一條數據影響多條數據的時候就需要用watch
    栗子:搜索數據

6、$nextTick的使用

答:當你修改了data的值然後馬上獲取這個dom元素的值,是不能獲取到更新後的值,
你需要使用$nextTick這個回調,讓修改後的data值渲染更新到dom元素之後在獲取,才能成功。

7、vue組件中data爲什麼必須是一個函數?

答:因爲JavaScript的特性所導致,在component中,data必須以函數的形式存在,不可以是對象。
  組建中的data寫成一個函數,數據以函數返回值的形式定義,這樣每次複用組件的時候,都會返回一份新的data,相當於每個組件實例都有自己私有的數據空間,它們只負責各自維護的數據,不會造成混亂。而單純的寫成對象形式,就是所有的組件實例共用了一個data,這樣改一個全都改了。

8、v-if和v-for的優先級

答:當 v-if 與 v-for 一起使用時,v-for 具有比 v-if 更高的優先級,這意味着 v-if 將分別重複運行於每個 v-for 循環中。所以,不推薦v-if和v-for同時使用。
如果v-if和v-for一起用的話,vue中的的會自動提示v-if應該放到外層去。

9、vue常用的修飾符

答:
.stop:等同於JavaScript中的event.stopPropagation(),防止事件冒泡;
.prevent:等同於JavaScript中的event.preventDefault(),防止執行預設的行爲(如果事件可取消,則取消該事件,而不停止事件的進一步傳播);
.capture:與事件冒泡的方向相反,事件捕獲由外到內;
.self:只會觸發自己範圍內的事件,不包含子元素;
.once:只會觸發一次。

10、vue的兩個核心點

答:數據驅動、組件系統
數據驅動:ViewModel,保證數據和視圖的一致性。
組件系統:應用類UI可以看作全部是由組件樹構成的。

11、params和query的區別

答:
用法:query要用path來引入,params要用name來引入,接收參數都是類似的,分別是this.$route.query.paththis.$route.params.name

url地址顯示:query更加類似於我們ajax中get傳參,params則類似於post,說的再簡單一點,前者在瀏覽器地址欄中顯示參數,後者則不顯示
注意點:query刷新不會丟失query裏面的數據
params刷新 會 丟失 params裏面的數據。

12、vue-router實現路由懶加載( 動態加載路由 )

答:三種方式
第一種:vue異步組件技術 ==== 異步加載,vue-router配置路由 , 使用vue的異步組件技術 , 可以實現按需加載 .但是,這種情況下一個組件生成一個js文件。

第二種:路由懶加載(使用import)。

第三種:webpack提供的require.ensure(),vue-router配置路由,使用webpack的require.ensure技術,也可以實現按需加載。這種情況下,多個路由指定相同的chunkName,會合並打包成一個js文件。

13、什麼是vue的計算屬性?

答:在模板中放入太多的邏輯會讓模板過重且難以維護,在需要對數據進行復雜處理,且可能多次使用的情況下,儘量採取計算屬性的方式。
好處:
①使得數據處理結構清晰;
②依賴於數據,數據更新,處理結果自動更新;
③計算屬性內部this指向vm實例;
④在template調用時,直接寫計算屬性名即可;
⑤常用的是getter方法,獲取數據,也可以使用set方法改變數據;
⑥相較於methods,不管依賴的數據變不變,methods都會重新計算,但是依賴數據不變的時候computed從緩存中獲取,不會重新計算。

14、綁定 class 的數組用法

對象方法 : v-bind:class="{'orange': isRipe, 'green': isNotRipe}"
數組方法 : v-bind:class="[class1, class2]"
行內 : v-bind:style="{color: color, fontSize: fontSize+'px' }"

finally、一句話就能回答的面試題

1.css只在當前組件起作用
答:在style標籤中寫入scoped即可
例如:

<style scoped></style>

2.route和router的區別
答:
route是路由信息對象,包括path、params、hash、query、fullPath、matched、name等路由信息。
router是“路由實例”對象包括了路由的跳轉方法,鉤子函數等。

3、vue.js的兩個核心是什麼?
答:數據驅動、組件系統

4、vue幾種常用的指令
答:v-for 、 v-if、v-else 、v-bind、v-on、v-show

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章