vue

一、defineproperty和proxy

1、相同

都是基于數(shù)據(jù)劫持的雙向綁定

2、不同

Object.defineProperty等方法對(duì) 對(duì)象屬性 的 "劫持"
Proxy是對(duì) 對(duì)象 的 "劫持"

Object.defineProperty需要結(jié)合發(fā)布訂閱模式實(shí)現(xiàn)數(shù)據(jù)雙向綁定

(1) Object.defineProperty的缺點(diǎn)
  1. 無(wú)法監(jiān)聽(tīng)數(shù)組變化,只有這7種辦法可以監(jiān)聽(tīng)數(shù)組變化
  • push()
  • pop()
  • shift()
  • unshift()
  • splice()
  • sort()
  • reverse()
  1. 只能劫持對(duì)象的屬性,如果屬性值也是對(duì)象那么需要深度遍歷
(2) proxy的優(yōu)點(diǎn)

1.Proxy可以直接監(jiān)聽(tīng)數(shù)組的變化
2.Proxy直接可以劫持整個(gè)對(duì)象,并返回一個(gè)新對(duì)象

@@@@Vue的響應(yīng)式數(shù)據(jù)原理

其實(shí)就是Vue 內(nèi)部有一個(gè)機(jī)制能監(jiān)聽(tīng)到數(shù)據(jù)變化然后觸發(fā)更新

  1. new Vue()的時(shí)候,我們會(huì)把options傳進(jìn)去
  2. 然后會(huì)調(diào)用init()進(jìn)行vue初始化的過(guò)程,對(duì)狀態(tài)進(jìn)行初始化initState()
  3. 初始化的順序依次是 prop>methods>data>computed>watch,
  4. initData()的時(shí)候會(huì)將data掛載到vm實(shí)例上,這樣我們以就可使用this.data代替this.$options.data
  5. 同時(shí)通過(guò)observe(data)對(duì)數(shù)據(jù)進(jìn)行觀(guān)測(cè)(\color{#ff00ff}{響應(yīng)式數(shù)據(jù)核心}),在observe中對(duì)data的所有屬性進(jìn)行遍歷,并通過(guò)object.defineProperty()對(duì)屬性進(jìn)行數(shù)據(jù)劫持,如果屬性的值還是一個(gè)對(duì)象,就會(huì)再遞歸遍歷,進(jìn)行數(shù)據(jù)劫持
  6. 對(duì)數(shù)組,預(yù)先設(shè)置7個(gè)方法,如果是這幾種方法,會(huì)調(diào)用Observer實(shí)例的observeArray對(duì)數(shù)組每一項(xiàng)進(jìn)行觀(guān)測(cè)

注意:
對(duì)象新增或者刪除屬性無(wú)法被 set 監(jiān)聽(tīng)到 只有對(duì)象本身存在的屬性修改才會(huì)被劫持

二、發(fā)布訂閱模式和觀(guān)察者模式的區(qū)別

1、發(fā)布訂閱模式

發(fā)布訂閱模式中,包含發(fā)布者,\color{#ff00ff}{事件調(diào)度中心},訂閱者三個(gè)角色。

發(fā)布者和訂閱者是松散耦合的,互不關(guān)心對(duì)方是否存在,他們關(guān)注的是事件本身

發(fā)布者借用事件調(diào)度中心提供的\color{#ff00ff}{emit}方法發(fā)布事件,而訂閱者則通過(guò)\color{#ff00ff}{on}進(jìn)行訂閱。

2、觀(guān)察者模式

觀(guān)察者模式只有兩個(gè)主體,分別是目標(biāo)對(duì)象Subject,觀(guān)察者Observer。

目標(biāo)對(duì)象只管理一種事件,需要維護(hù)自身的觀(guān)察者數(shù)組observerList,當(dāng)自身發(fā)生變化時(shí),通過(guò)調(diào)用自身的notify方法,依次通知每一個(gè)觀(guān)察者執(zhí)行update方法。
參考

三、v-for的key有什么作用

key主要作用是 高效地更新DOM,patch的時(shí)候會(huì)執(zhí)行patchVnode,然后執(zhí)行updateChildren方法,更新新舊元素,通過(guò)key可以精準(zhǔn)的判斷新舊節(jié)點(diǎn)是否為同一個(gè)節(jié)點(diǎn),如果沒(méi)有key就會(huì)認(rèn)為是同一個(gè)節(jié)點(diǎn),這樣就能避免很多的節(jié)點(diǎn)更新操作,結(jié)合通過(guò)判斷首尾的一致性的方法更高效地更新dom。

四、diff算法

深度優(yōu)先,同級(jí)比較,左右根
節(jié)點(diǎn)patch的策略,首先看雙方是否都有孩子,都有、一方有,都沒(méi)有分別對(duì)應(yīng)不同的操作
總結(jié):
1、diff算法通過(guò) 高效比較 新舊虛擬DOM,將變化的地方更新到真實(shí)DOM
2、通過(guò)diff算法可以 精確找到 變化了的地方
3、Vue中diff執(zhí)行的時(shí)刻是組件實(shí)例執(zhí)行其更新函數(shù)時(shí),他會(huì)比對(duì)上一次渲染結(jié)果oldVnode和新渲染結(jié)果newVnode,此過(guò)程稱(chēng)為patch
4、diff過(guò)程整體遵循深度優(yōu)先、同層比較的策略;兩個(gè)節(jié)點(diǎn)之間比較會(huì)根據(jù)他們是否擁有子節(jié)點(diǎn)或文本節(jié)點(diǎn)做不同的操作;比較子節(jié)點(diǎn)是算法的重點(diǎn),首先假設(shè)頭尾節(jié)點(diǎn)可能相同做4次對(duì)比,如果沒(méi)有找到相同才會(huì)按照通用的方式遍歷查找,查找結(jié)束再按情況處理剩下的節(jié)點(diǎn),借助key可以非常精確的找到相同的節(jié)點(diǎn),使整體patch過(guò)程非常高效

五、組件化

  1. 將獨(dú)立的功能和模塊單獨(dú)提出來(lái),把他切分為更小的塊,具有獨(dú)立的邏輯,更好的復(fù)用性
  2. 定義:
Vue.component('comp',{})
  1. 提高開(kāi)發(fā)效率、復(fù)用性、可維護(hù)性
  2. 組件分類(lèi)有:頁(yè)面組件、業(yè)務(wù)組件、通用組件
  3. 常見(jiàn)的組件化技術(shù):prop、自定義時(shí)間、插槽等
  4. 單向數(shù)據(jù)流

六、對(duì)Vue設(shè)計(jì)原則的理解

  1. 漸進(jìn)式j(luò)avascript框架
  2. 易用、靈活和高效
    靈活:應(yīng)用足夠小,我們只需要vue核心就i可以,隨著應(yīng)用變大,我們才可能引入路由、狀態(tài)管理、vue-cli等工具
    高效:超快的虛擬DOM和diff算法

七、談?wù)剬?duì)MVC、MVP、MVVM的理解

講歷史
web1.0時(shí)代:jsp,每個(gè)文件中同事包含了html、css,js、java等,前后端代碼混在一起,難以維護(hù),SSH等框架
web2.0時(shí)代,ajax開(kāi)始出現(xiàn),前后端開(kāi)始分離
MVC
View(將model數(shù)據(jù)展示)
Controller(根據(jù)業(yè)務(wù)邏輯,修改model數(shù)據(jù))
Model(拿到后端數(shù)據(jù))
在 Controller 里面把 Model 的數(shù)據(jù)賦值給 View
MVVM
Model(拿到后端數(shù)據(jù))
View(將model數(shù)據(jù)展示)
ViewModel(通過(guò)一套機(jī)制自動(dòng)響應(yīng)Model中數(shù)據(jù)的變化),減少了大量操作DOM的代碼

總結(jié):

MVVM 與 MVC 最大的區(qū)別就是:它實(shí)現(xiàn)了 View 和 Model 的自動(dòng)同步,也就是當(dāng) Model 的屬性改變時(shí),我們不用再自己手動(dòng)操作 Dom 元素,來(lái)改變 View 的顯示,而是改變屬性后該屬性對(duì)應(yīng) View 層顯示會(huì)自動(dòng)改變(對(duì)應(yīng)Vue數(shù)據(jù)驅(qū)動(dòng)的思想

  1. 三者都是框架模式,目的是解決Model和View的耦合問(wèn)題
  2. MVC出現(xiàn)在后端,優(yōu)點(diǎn)是分層清晰,缺點(diǎn)是數(shù)據(jù)流混亂,不靈活,維護(hù)困難
  3. MVVM,解決耦合問(wèn)題,減少了DOM操作代碼,提高了開(kāi)發(fā)效率,容易維護(hù)

Vue 并沒(méi)有完全遵循 MVVM

嚴(yán)格的 MVVM 要求 View 不能和 Model 直接通信,而 Vue 提供了$refs 這個(gè)屬性,讓 Model 可以直接操作 View,違反了這一規(guī)定,所以說(shuō) Vue 沒(méi)有完全遵循 MVVM。

八、VUE優(yōu)化

<1> 代碼層面
  1. 多用v-show代替v-if,大組件,v-show總是會(huì)被渲染,只是通過(guò)css的display進(jìn)行切換
  2. v-for和v-if不同時(shí)使用,同時(shí)使用會(huì):渲染每一項(xiàng)都會(huì)先遍歷,再判斷if,這樣影響渲染效率,如果只需要渲染一小部分,就可以通過(guò)computed進(jìn)行處理
  3. computed:使用場(chǎng)景: 需要數(shù)值計(jì)算,并且依賴(lài)其他數(shù)據(jù)時(shí)。
    優(yōu)點(diǎn):有緩存,只有當(dāng)它依賴(lài)的其他數(shù)據(jù)有變化,才會(huì)重新計(jì)算
    watch:數(shù)據(jù)變化的時(shí)候需要進(jìn)行異步操作或者開(kāi)銷(xiāo)較大的操作的時(shí)候使用
  4. 長(zhǎng)列表優(yōu)化:
    • 情景一:如果有大量數(shù)據(jù)要進(jìn)行展示,只是單純進(jìn)行展示,可以通過(guò)Object.freeze()禁止數(shù)據(jù)劫持
    • 情景二:優(yōu)化無(wú)限滾動(dòng)列表的性能,利用窗口化的技術(shù),只渲染少部分區(qū)域的內(nèi)容,減少重新渲染dom的時(shí)間,使用vue-virtual-scroll-list
  5. 圖片懶加載,通過(guò)vue-lazyload插件,標(biāo)簽中使用v-lazy
  6. 路由懶加載,將不同的路由對(duì)應(yīng)的組件分割成不同的代碼塊,然后當(dāng)路由被訪(fǎng)問(wèn)的時(shí)候才去加載對(duì)應(yīng)的組件,加載效率會(huì)更快
  7. 第三方插件按需引入,利用babel-plugin-component
  8. SSR
  • 優(yōu)點(diǎn):
    a> 更好的SEO,單頁(yè)應(yīng)用的頁(yè)面內(nèi)容是空的,SSR返回的是渲染之后返回的是擁有真實(shí)DOM節(jié)點(diǎn)的html文件,更容易搜索到
    b> 首屏更快,Vue要等到所有Vue編譯后的js文件都下載完成后,才開(kāi)始進(jìn)行頁(yè)面的渲染,文件下載和dom節(jié)點(diǎn)的渲染都需要時(shí)間;但是,SSR直接返回的就是已經(jīng)渲染好的html頁(yè)面,更快
  • 缺點(diǎn):
    a> 開(kāi)發(fā)條件限制,只有beforeCreate和create兩個(gè)鉤子函數(shù)
    b> 運(yùn)行環(huán)境是node Server
    c> 服務(wù)器負(fù)載更大,占用cpu資源
    d> 如果只需要改善少數(shù)幾個(gè)頁(yè)面,則不必使用SSR,使用預(yù)渲染,通過(guò)prerender-spa-plugin添加預(yù)渲染
  1. keep-alive緩存頁(yè)面減少dom渲染
  2. 定時(shí)器銷(xiāo)毀、事件監(jiān)聽(tīng)器解綁
<2> webpack層面的優(yōu)化

1、圖片優(yōu)化:通過(guò)url-loader的limit,小于limit的圖片轉(zhuǎn)化為base64格式,對(duì)較大的圖片資源,使用image-webpack-loader來(lái)壓縮圖片
2、提取公共代碼:通過(guò)CommonsChunkPlugin提取多個(gè)頁(yè)面的公共代碼

  • 如果沒(méi)有將第三方庫(kù)和公共資源提取出來(lái),會(huì)有2個(gè)問(wèn)題

1、相同的資源被重復(fù)加載,浪費(fèi)用戶(hù)流量和服務(wù)器成本
2、每個(gè)頁(yè)面需要加載的資源太大,導(dǎo)致網(wǎng)頁(yè)首屏加載緩慢

九、Vue3.0新特性

更快
  1. 虛擬DOM重寫(xiě)
  2. 優(yōu)化slots的生成
  3. 靜態(tài)樹(shù)的提升
  4. 靜態(tài)屬性提升
    5.基于proxy的響應(yīng)式系統(tǒng)
更小

優(yōu)化核心庫(kù)體積

更易維護(hù)

ts+模塊化

更友好

跨平臺(tái)

更易用

更好的ts支持
更好的調(diào)試支持
獨(dú)立的相應(yīng)化模塊

十、父子組件傳值

1. prop和$emit
  • 父?jìng)髯樱簆rop
  • 子傳父:$emit
2. $refs、$parent和$children
  • $refs,為子組件指定一個(gè)名字通過(guò)$refs拿到子組件的data和methods
  • $children,拿到所有的子組件(數(shù)組),但是不保證順序
  • $parent,拿到上一級(jí)父組件的data和methods
  • $root,當(dāng)有多級(jí)父組件時(shí),$root拿到根父組件
3. $attrs 和 $listeners

適用的場(chǎng)景是A>B>C這種,A和C組件進(jìn)行交流可以使用這兩個(gè)屬性

  • C組件中能直接觸發(fā)A組件中的方法test的原因在于 B組件調(diào)用C組件時(shí) 使用 v-on 綁定了$listeners 屬性
  • 通過(guò)v-bind 綁定$attrs屬性,C組件可以直接獲取到A組件中傳遞下來(lái)的props(除了B組件中props中聲明的)
4. provide和inject

父組件中通過(guò)provider來(lái)提供變量,然后在子組件中通過(guò)inject來(lái)注入變量

5. eventBus
  • 初始化

方式一:
// event-bus.js
import Vue from 'vue'
export const EventBus = new Vue()

方式二
// main.js
//這種方式初始化的EventBus是一個(gè)全局的事件總線(xiàn)
Vue.prototype.$EventBus = new Vue()

  • 發(fā)送事件

//A頁(yè)面
import { EventBus } from "../event-bus.js";
EventBus.$emit("aMsg", '來(lái)自A頁(yè)面的消息');

  • 接收事件

//B頁(yè)面
import { EventBus } from "../event-bus.js";
EventBus.$on("aMsg", (msg) => {
// A發(fā)送來(lái)的消息
this.msg = msg;

});
  • 缺點(diǎn):

如果你在某一個(gè)頁(yè)面刷新了之后,與之相關(guān)的EventBus會(huì)被移除,這樣就導(dǎo)致業(yè)務(wù)走不下去。還要就是如果業(yè)務(wù)有反復(fù)操作的頁(yè)面,EventBus在監(jiān)聽(tīng)的時(shí)候就會(huì)觸發(fā)很多次,也是一個(gè)非常大的隱患。

  • 解決方法:

vue頁(yè)面銷(xiāo)毀時(shí),同時(shí)移除EventBus事件監(jiān)聽(tīng)
EventBus.$off()


全局eventBus(基于發(fā)布訂閱模式)
  • 創(chuàng)建
var EventBus = new Vue();

Object.defineProperties(Vue.prototype, {
  $bus: {
    get: function () {
      return EventBus
    }
  }
})
  • 傳遞數(shù)據(jù)
this.$bus.$emit('nameOfEvent', { ... pass some event data ...});

this.$bus.$on('nameOfEvent',($event) => {
  // ...
})
//移除監(jiān)聽(tīng)
this.$bus.$off('nameOfEvent')

十一、虛擬 DOM 是什么 有什么優(yōu)缺點(diǎn)

Virtual DOM 本質(zhì)就是用一個(gè)原生的 JS 對(duì)象去描述一個(gè) DOM 節(jié)點(diǎn),是對(duì)真實(shí) DOM 的一層抽象。

優(yōu)點(diǎn):

  1. 保證性能下限:直接操作DOM非常影響性能,虛擬 DOM可以保證比直接操作DOM更好的性能
  2. 無(wú)需手動(dòng)操作 DOM:只需要寫(xiě)好 View-Model 的代碼邏輯,框架會(huì)根據(jù)虛擬 DOM 和 數(shù)據(jù)雙向綁定,幫我們以可預(yù)期的方式更新視圖
  3. 跨平臺(tái): 虛擬 DOM 本質(zhì)上是 JavaScript 對(duì)象,而 DOM 與平臺(tái)強(qiáng)相關(guān)

缺點(diǎn):

  1. 更深層次的優(yōu)化困難
  2. 首次渲染大量 DOM 時(shí),由于多了一層虛擬 DOM 的計(jì)算,會(huì)比 innerHTML 插入慢

十二、路由守衛(wèi)

3種:全局的、組件內(nèi)的、單個(gè)路由獨(dú)享三種

全局的:beforeEach、afterEach
單個(gè)路由獨(dú)享:beforeEnter,

  • 與全局的beforeEach完全相同,如果都設(shè)置則在beforeEach之后緊隨執(zhí)行,參數(shù)to、from、next

組件內(nèi)的路由鉤子函數(shù): beforeRouteEnter、beforeRouteUpdate、beforeRouteLeave

  • beforeRouteEnter:路由進(jìn)入組件之前調(diào)用,this不可訪(fǎng)問(wèn)
  • beforeRouteUpdate:在當(dāng)前路由改變時(shí),并且該組件被復(fù)用時(shí)調(diào)用,this可以使用
  • beforeRouteLeave:離開(kāi)該組件時(shí)調(diào)用,this可以使用

十三、路由傳參

<router-link :to="{name:'first',params:{name:'張三'}}">
<router-link :to="{name:'second',query:{name:'李四'}}">

params動(dòng)態(tài)路由傳參和query動(dòng)態(tài)路由傳參的區(qū)別

  • query : 在url地址欄上以?拼接了參數(shù)路徑
  • params: 沒(méi)有拼接
params傳參刷新頁(yè)面會(huì)丟失參數(shù),解決辦法?
  1. path: '/first/:name'
 {
    path: '/first/:name',
    name:'first',
    component:()=>import( '../components/first.vue' )
  }
//跳轉(zhuǎn)方式  1
<router-link to="/first/張三">
//跳轉(zhuǎn)方式 2
<a @click="$router.push({name:'first',params:{name:'張三'}})">
  1. 手動(dòng)通過(guò)?拼接
    <router-link to="/second?name=張三">
    <a @click="$router.push('/second?name=張三')">

十四、keep-alive

緩存頁(yè)面減少反復(fù)渲染
使用LRU算法(最近最少使用淘汰)

  • 新數(shù)據(jù)插入到隊(duì)列尾部,
  • 緩存命中的數(shù)據(jù)也放到隊(duì)列尾部
  • 當(dāng)數(shù)據(jù)達(dá)到一定量時(shí),從隊(duì)列頭部開(kāi)始刪除訪(fǎng)問(wèn)幾率最低的數(shù)據(jù)

十五、vue-router的實(shí)現(xiàn)原理

兩種模式:hash和history
hash模式:監(jiān)聽(tīng)hashchange事件實(shí)現(xiàn)更新頁(yè)面部分內(nèi)容的操作
history模式:3個(gè)事件:pushState、replaceState、popState

十六、路由傳參

兩種方式: query、params+動(dòng)態(tài)路由
1. query

寫(xiě)法:path/name+query
url展現(xiàn)方式:/detail?id=1&user=123&identity=1&更多參數(shù)
數(shù)據(jù)接收:this.$route.query.id
刷新頁(yè)面,數(shù)據(jù)不會(huì)丟失

2. params+動(dòng)態(tài)路由

寫(xiě)法: 首先,路由定義 path: '/detail/:id',然后router-link,name+params
數(shù)據(jù)接收:this.$route.params.id
如果不寫(xiě)/:id,也能進(jìn)行傳參,但是頁(yè)面刷新后數(shù)據(jù)就丟失了

十七、Vue的優(yōu)點(diǎn)

  1. 輕量級(jí) 大小只有幾十kb
  2. 簡(jiǎn)單易學(xué),國(guó)人開(kāi)發(fā)
  3. 雙向數(shù)據(jù)綁定,數(shù)據(jù)操作更簡(jiǎn)單
  4. 組件化,html頁(yè)面的封裝和服用
  5. 虛擬DOM操作,減少了操作DOM

十八、computed和watch的適用場(chǎng)景

computed適用于多個(gè)數(shù)據(jù)影響一個(gè)屬性的場(chǎng)景
watch適用于一個(gè)數(shù)據(jù)影響多個(gè)數(shù)據(jù)的場(chǎng)景

十九、v-if和v-for

v-for的優(yōu)先級(jí)更高

二十、static和assets的區(qū)別

相同點(diǎn)

assets和static文件夾中都用來(lái)存放靜態(tài)資源,比如:文件、圖片、字體圖標(biāo)、css等

不同點(diǎn)

在打包時(shí)(npm run build),assets文件夾中的資源會(huì)進(jìn)行壓縮之后才會(huì)放入dist中的static中,static文件夾中的資源不會(huì)壓縮,直接放入dist中的static文件夾中

所以

引入的第三方的文件一般放到static文件夾中,因?yàn)榈谌降奈募呀?jīng)經(jīng)過(guò)壓縮處理,無(wú)需再處理,而項(xiàng)目中自己開(kāi)發(fā)的css、js等文件還是放到assets中進(jìn)行壓縮處理

二十一、Vue和jQuery的區(qū)別

jquery是使用選擇器$方便地獲取DOM元素,然后操作DOM對(duì)象,數(shù)據(jù)和視圖并沒(méi)有分離
Vue做到了數(shù)據(jù)和視圖分離,MVVM框架,修改數(shù)據(jù)無(wú)需再操作DOM節(jié)點(diǎn)

二十二、Vue頁(yè)面初始化閃動(dòng)的問(wèn)題

會(huì)先顯示{{message}}這種

  1. 在CSS中加上
[v-clock]{
  display:none
}

2.如果還是沒(méi)有解決,則在根元素加

style="display=none;"  :style="{display:'block'}"

二十三、鉤子相關(guān)問(wèn)題

1. 第一次頁(yè)面加載會(huì)觸發(fā)哪些鉤子函數(shù)

beforeCreate、created、beforeMount、mounted

2. ajax請(qǐng)求最好放在created里面,因?yàn)榇藭r(shí)已經(jīng)可以訪(fǎng)問(wèn)this了,請(qǐng)求到數(shù)據(jù)就可以直接放在data里面。

這里也碰到過(guò)幾次,面試官問(wèn):ajax請(qǐng)求應(yīng)該放在哪個(gè)生命周期。

3. 關(guān)于dom的操作要放在mounted里面,在mounted前面訪(fǎng)問(wèn)dom會(huì)是undefined。
4. 每次進(jìn)入/離開(kāi)組件都要做一些事情,用什么鉤子:

不緩存:
進(jìn)入的時(shí)候可以用created和mounted鉤子,離開(kāi)的時(shí)候用beforeDestory和destroyed鉤子,beforeDestory可以訪(fǎng)問(wèn)this,destroyed不可以訪(fǎng)問(wèn)this。
緩存了組件:
緩存了組件之后,再次進(jìn)入組件不會(huì)觸發(fā)beforeCreate、created 、beforeMount、 mounted,如果你想每次進(jìn)入組件都做一些事情的話(huà),你可以放在activated進(jìn)入緩存組件的鉤子中。
同理:離開(kāi)緩存組件的時(shí)候,beforeDestroy和destroyed并不會(huì)觸發(fā),可以使用deactivated離開(kāi)緩存組件的鉤子來(lái)代替

5. 觸發(fā)鉤子的完整順序:

將路由導(dǎo)航、keep-alive、和組件生命周期鉤子結(jié)合起來(lái)的,觸發(fā)順序,假設(shè)是從a組件離開(kāi),第一次進(jìn)入b組件:

  1. beforeRouteLeave:路由組件的組件離開(kāi)路由前鉤子,可取消路由離開(kāi)。
  2. beforeEach: 路由全局前置守衛(wèi),可用于登錄驗(yàn)證、全局路由loading等。
  3. beforeEnter: 路由獨(dú)享守衛(wèi)
  4. beforeRouteEnter: 路由組件的組件進(jìn)入路由前鉤子。
  5. beforeResolve:路由全局解析守衛(wèi)
  6. afterEach:路由全局后置鉤子
  7. beforeCreate:組件生命周期,不能訪(fǎng)問(wèn)this
  8. created:組件生命周期,可以訪(fǎng)問(wèn)this,不能訪(fǎng)問(wèn)dom。
  9. beforeMount:組件生命周期
  10. deactivated: 離開(kāi)緩存組件a,或者觸發(fā)a的beforeDestroydestroyed組件銷(xiāo)毀鉤子。
  11. mounted:訪(fǎng)問(wèn)/操作dom。
  12. activated:進(jìn)入緩存組件,進(jìn)入a的嵌套子組件(如果有的話(huà))。
  13. 執(zhí)行beforeRouteEnter回調(diào)函數(shù)next。

二十四、router-link和a標(biāo)簽有什么區(qū)別

  1. 有click事件就先執(zhí)行click事件
  2. click的時(shí)候,阻止a標(biāo)簽的默認(rèn)事件(跳轉(zhuǎn)和刷新頁(yè)面)
  3. 在取得href,通過(guò)history模式跳轉(zhuǎn),只是鏈接變了,并不會(huì)刷新頁(yè)面

參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容