1,生命周期
從創建到渲染的過程,不僅僅問8個函數四個階段
組件創建時:creating: 模板渲染時:mounting 數據更新時:updating 組件卸載時:destroying
1.1 圖示
1.2 生命周期鈎子函數
beforeCreate:創建前,在數據觀測和初始化事件還未開始
created:創建后,完成數據觀測,屬性和方法的運算,初始化事件,el屬性還沒有顯示出來
beforeMount:載入前,在掛載開始之前被調用,相關的render函數首次被調用。實例已完成以下的配置:編譯模 板,把data里面的數據和模板生成html。注意此時還沒有掛載html到頁面上。
mounted:載入后,在el 被新創建的 vm.$el 替換,並掛載到實例上去之后調用。實例已完成以下的配置:用上面編譯好的html內容替換el屬性指向的DOM對象。完成模板中的html渲染到html頁面中。此過程中進行ajax交互。
beforeUpdate:更新前,在數據更新之前調用,發生在虛擬DOM重新渲染和打補丁之前。可以在該鈎子中進一步地更改狀態,不會觸發附加的重渲染過程。
updated:更新后,在由於數據更改導致的虛擬DOM重新渲染和打補丁之后調用。調用時,組件DOM已經更新,所以可以執行依賴於DOM的操作。然而在大多數情況下,應該避免在此期間更改狀態,因為這可能會導致更新無限循環。該鈎子在服務器端渲染期間不被調用。
beforeDestroy:銷毀前,在實例銷毀之前調用。實例仍然完全可用。
destroyed:銷毀后,在實例銷毀之后調用。調用后,所有的事件監聽器會被移除,所有的子實例也會被銷毀。該鈎子在服務器端渲染期間不被調用。
1.3 回答的相關問題
- 什么是vue生命周期?
答: Vue 實例從創建到銷毀的過程,就是生命周期。從開始創建、初始化數據、編譯模板、掛載Dom→渲染、更新→渲染、銷毀等一系列過程,稱之為 Vue 的生命周期。
- vue生命周期的作用是什么?
答:它的生命周期中有多個事件鈎子,讓我們在控制整個Vue 實例的過程時更容易形成好的邏輯。
- vue生命周期總共有幾個階段?
答:它可以總共分為8個階段:創建前/后, 載入前/后,更新前/ 后,銷毀前/銷毀后。
- 第一次頁面加載會觸發哪幾個鈎子?
答:會觸發 下面這幾個beforeCreate, created, beforeMount, mounted 。
- DOM 渲染在 哪個周期中就已經完成?
答:DOM 渲染在 mounted 中就已經完成了。
- created階段的ajax請求與mounted請求的區別:前者頁 面視圖未出現,如果請求信息過多,頁面會長時間處於白屏狀態
- mounted 不會承諾所有的子組件也都一起被掛載。如果你希望等到整個視圖都渲染
2,組件封裝
封裝組件:主要是為了解耦,具備高性能、低耦合,在通用組件的時候要留一個插槽
為什么data必須是一個函數:主要是防止組件與組件之前 聲明的變量相互影響
3,axios
3.1 axios是什么?
axios是基於promise的用於瀏覽器和node.js的http客戶 端,主要作用就是向后退發送請求。
支持promise
提供並發方法:同時請求兩個接口提供了攔截器
提供支持CSRF(跨站請求偽造)
4,vuex
4.1 vuex是什么?
vuex為vue構建一個狀態集管理,主要是為了解決組件狀態共享的問題,強調的是集中式管理,便於便於維護,便於解耦,適用於大型項目
state
Vuex 使用單一狀態樹,即每個應用將僅僅包含一個store 實例,但單一狀態樹和模塊化並不沖突。存放的數據狀態, 不可以直接修改里面的數據。
mutations
mutations定義的方法動態修改Vuex 的 store 中的狀態或數據。
getters
類似vue的計算屬性,主要用來過濾一些數據。
action
actions可以理解為通過將mutations里面處里數據的方 法變成可異步的處理數據的方法,簡單的說就是異步操作數據。view 層通過 store.dispath 來分發 action。
modules
項目特別復雜的時候,可以讓每一個模塊擁有自己的state、mutation、action、getters,使得結構非常清晰,方 便管理。
4.2 怎么使用?
vuex包含5個模塊:
state:存放數據的位置mutations:變更狀態getters:動態變更數據
actions:actions從動作層調用mutations去更改狀態modules:拆分倉庫
4.3 哪種場景使用它?
大型應用
5 vue指令
4個vue中的指令和它的用法
v-if:條件渲染指令,代表存在消耗v-bind:用來綁定屬性,簡寫(:)
v-on:監聽指令,簡寫(@) v-for:循環指令
6 導航鈎子
vue-router 提供的導航守衛主要用來通過跳轉或取消的方式守衛導航。
6.1 導航鈎子有哪些?
導航鈎子就是路由的生命周期函數,主要包括全局和局部。
6.1.1 全局鈎子函數
beforeEach:路由切換開始調用,類似路由守衛
對於登錄的設置案例:
afterEach:路由切換離開時調用
6.1.2 局部的鈎子函數
局部到單個路由:
beforeEnter
組件的鈎子函數:
beforeRouterEnter beforeRouterUpdate beforeRouterLeave
7
v-model是什么?Vue中標簽怎么綁定事件?
Vue利用v-model進行表單數據雙向綁定,做了兩個操作v-bind綁定一個value的屬性
v-on幫當前的元素綁定到一個事件上
8 如何使用Vue構建項目
1,使用Vue-cli腳手架構建項目
2,直接引用vue.js進行項目的構建
9 swiper插件
swiper插件從后台獲取數據沒有問題,css代碼也沒有問題,但是圖片沒有動,怎么解決?
swiper提前初始化,這個時候數據還沒有完全出來。
解決方法,主要有兩個方向,一個從swiper,一個從
vue方面
9.1 vue方面
vue方面:vue中專門提供了一個nextTick(),用於解決dom
的先后執行問題
當數據加載完畢后,才執行swiper
9.1 swiper方面
10,路由懶加載
延遲加載、當需要的時候再加載,有效的分擔首頁的加載時間
11 Vue-loader
vue-loader就是一個加載器,把Vue編譯javaScript的模塊, 方便瀏覽器讀文件。
11.1 為什么要轉譯vue組件
動態的渲染一些數據
對三個標簽(template、script、style)都做了優化script中可以直接使用es6 style 也默認使用sass, 提供作用域的選擇
開發階段提供熱加載
12 插槽
vue插槽:slot是一個占位about.vue
12.1 具名插槽
12.2 默認插槽
默認插槽就是匿名插槽
12.3 作用域插槽
13 對vue虛擬DOM的理解
(重點)
13.1 什么是虛擬dom?
使用js對象形式去添加dom元素,本質上是優化了diff算法,先在js上面批量更改,然后批量在真實節點上面修改。采用了新舊節點的對比,獲取差異的dom,一次性更新到真實的dom上,從而
13.2 缺陷?
一般是同級或者兄弟層級的修改,盡量不要跨層級修改
dom,設置key,可以最大的理由節點
14 MVVM模式
14.1 mvc
控制器:Controller 視圖:View
模型:Model
14.2 MVVM(重看)
Model:代表數據模型,也可以在Model中定義數據修改和操作的業務邏輯。
View:代表UI 組件,它負責將數據模型轉化成UI 展現出來 。 ViewModel:監聽模型數據的改變和控制視圖行為、處理用戶交互,簡單理解就是一個同步View 和 Model的對
象,連接Model和View。
【模型】指的是后端傳遞的數據。【視圖】指的是所看到的頁面。【視圖模型】mvvm模式的核心,它是連接view和model的橋梁。它有兩個方向:一是將【模型】轉化成【視 圖】,即將后端傳遞的數據轉化成所看到的頁面。實現的方式是:數據綁定。二是將【視圖】轉化成【模型】,即將所看到的頁面轉化成后端的數據。實現的方式是:DOM 事件監聽。這兩個方向都實現的,我們稱之為數據的雙向綁定。
在MVVM的框架下視圖和模型是不能直接通信的。它們通過ViewModel來通信,ViewModel通常要實現一個 observer觀察者,當數據發生變化,ViewModel能夠監聽到 數據的這種變化,然后通知到對應的視圖做自動更新,而當用戶操作視圖,ViewModel也能監聽到視圖的變化,然后通
知數據做改動,這實際上就實現了數據的雙向綁定。並且
MVVM中的View 和 ViewModel可以互相通信。
15 keep-alive
15.1 什么是keep-alive
它能讓不活動的組件“活着”,從A頁面跳轉到B頁面,一般從B頁面返回A頁面,A頁面會重新加載,但是keep-alive會保存到內存里面。
它提供了include與exclude兩個屬性,允許組件有條件的緩存
15.2 實現的原理
在created時候,將需要緩存的vnode節點放到cache中,在
render的時候根據name取出
15.3 使用
App.vue
16 Vue組件間的參數傳遞
16.1 父組件與子組件傳值
父組件傳給子組件:子組件通過props方法接受數據; 子組件傳給父組件:$emit方法傳遞參數
16.2
非父子組件間的數據傳遞,兄弟組件傳值
eventBus,就是創建一個事件中心,相當於中轉站,可以用它來傳遞事件和接收事件。項目比較小時,用這個比較合
適。
17,vue-cli如何新增自定義指令
17.1 創建局部指令
17.2 全局指令
18 自定義過濾器
html代碼:
JS代碼:
全局定義過濾器
過濾器接收表達式的值 (msg) 作為第一個參數。capitalize 過濾器將會收到 msg的值作為第一個參數。
19
css只在當前組件起作用
答:在style標簽中寫入scoped即可 例如:
20 v-if 和 v-show 區別
答:v-if按照條件是否渲染,v-show是display的block或
none;
21 和router的區別
答:是路由信息對象,包括,,,,,,等路由信息參數。而router是“路由實例”對象包括了路由的跳轉方法,鈎子函數等。
22
vue.js的兩個核心是什么?
兩個核心分別是數據驅動和組件系統
22.1 數據驅動
當數據發生變化的時候,用戶界面發生相應的變化,開發者不需要手動的去修改dom。
22.2 組件系統
vue中的組件分為兩種,全局組件和局部組件。
23 vue幾種常用的指令
答:v-for 、 v-if 、v-bind、v-on、v-show、v-else
24 vue常用的修飾符?
答:.prevent: 提交事件不再重載頁面;.stop: 阻止單擊事件冒泡;.self: 當事件發生在該元素本身而不是子元素的時候會觸發;.capture: 事件偵聽,事件發生的時候會調用
25
v-on 可以綁定多個方法嗎?
答:可以
26 vue中 key 值的作用?
答:當 Vue.js 用 v-for 正在更新已渲染過的元素列表時,它默認用“就地復用”策略。如果數據項的順序被改變,Vue 將不會移動 DOM 元素來匹配數據項的順序, 而是簡單復用此處每個元素,並且確保它在特定索引下顯示已被渲染過的每個元素。key的作用主要是為了高效的更新虛擬DOM。
27
什么是vue的計算屬性?
答:在模板中放入太多的邏輯會讓模板過重且難以維護,在需要對數據進行復雜處理,且可能多次使用的情況下,盡量采取計算屬性的方式。好處:①使得數據處理結構清晰;② 依賴於數據,數據更新,處理結果自動更新;③計算屬性內部this指向vm實例;④在template調用時,直接寫計算屬性名即可;⑤常用的是getter方法,獲取數據,也可以使用set 方法改變數據;⑥相較於methods,不管依賴的數據變不 變,methods都會重新計算,但是依賴數據不變的時候computed從緩存中獲取,不會重新計算。
28
vue等單頁面應用及其優缺點
答:優點:Vue 的目標是通過盡可能簡單的 API 實現響應的數據綁定和組合的視圖組件,核心是一個響應的數據綁定系統。MVVM、數據驅動、組件化、輕量、簡潔、高效、快 速、模塊友好。
缺點:不支持低版本的瀏覽器,最低只支持到IE9;不利於SEO的優化(如果要支持SEO,建議通過服務端來進行渲染組件);第一次加載首頁耗時相對長一些;不可以使用瀏覽器的導航按鈕需要自行實現前進、后退。
29
怎么定義 vue-router 的動態路由? 怎么獲取傳過來的值
答:在 router 目錄下的 index.js 文件中,對 path 屬性加上
/:id,使用 router 對象的 params.id 獲取。
30 vue的雙向綁定原理
j