搜尋
首頁web前端Vue.js【整理分享】一些vue-router相關面試題(附答案解析)

這篇文章為大家總結分享一些vue-router的相關面試題(附答案解析),帶你整理基礎知識,增強vue-router知識儲備,值得收藏,快來看看吧!

【整理分享】一些vue-router相關面試題(附答案解析)

vue-router的原理

在單一頁面應用程式中,不同元件之間的切換需要透過前端路由來實現。

前端路由

1.key是路徑,value是元件,用來展示頁面內容
2.工作過程:當瀏覽器的路徑改變時,對應的組件就會顯示。
vue-router的路由作用:將元件對應到路由, 然後渲染出來

##主要就是

  • 如何改變URL卻不引起頁面刷新

  • 如何偵測到URL變化了 【相關推薦:

    vuejs影片教學web前端開發

    #路由的hash模式
  • hash 是URL 中# 及後面的那部分,

    #後的url不會發送到伺服器,
  • 所以改變URL 中的hash 部分不會引起頁面刷新
  • window可以監聽onhashchange事件變更。當hash變化時,讀取

    #後的內容,根據資訊進行路由規則匹配,透過改變
  • window.location.hash
改變頁面路由。

    改變URL的三種方式
  • #透過瀏覽器前進後退改變URL
  • 透過標籤改變URL

透過window.location改變URL

    優點
  • #只需要前端設定路由表, 不需要後端的參與
  • 相容性好, 瀏覽器都能支援

hash值改變不會向後端發送請求, 完全屬於前端路由

    缺點

hash值前面需要加#, 不符合url規格,也不美觀

    路由的history模式- 利用H5的history API
  • html5 的history Interface 中新增的pushState()replaceState()

    方法,用來在瀏覽歷史中新增和修改記錄,改變頁面路徑,
  • 使URL跳轉不會重新載入頁面
  • 類似hashchange
    事件的popstate 事件,但popstate 事件有些不同:

    只有在做出
  • 瀏覽器的行為
才會呼叫popState,使用者點擊瀏覽器倒退按鈕和前進按鈕,或是使用JavaScript 呼叫History.back()、History.forward()、History.go()方法時才會觸發。

    優點
#符合url位址規格, 不需要#, 使用起來比較美觀

    #缺點
  • 在使用者
  • 手動輸入位址或重新整理頁面時會發起url請求, 後端需要設定index.html頁面使用者不符合靜態資源的情況, 否則會出現404錯誤相容性比較差, 是利用了HTML5 History物件中新增的pushState()
replaceState( )

方法,需要特定瀏覽器的支援.

$route和$router有什麼不同?

$router是VueRouter的實例物件,表示整個應用的唯一路由器物件。包含了路由跳轉的方法、鉤子函數等。 $route是目前路由對象,表示本組件的路由規則,每一個路由都會有一個route對象,是一個局部對象。

vue-router參數傳遞的幾種方式,有什麼差別?可以傳參沒有要求的值嗎路徑/params參數params是路由的一部分,如果在配置了佔位符必須要有傳遞路徑上沒有的佔位符,地址列上不會顯示並且刷新會丟失
##- 描述 如何指定跳轉的路由 如果沒有傳參
#params參數 #必須使用name指定路由
如果這個路由有params傳參,但是在跳轉的時候沒有傳這個參數,會導致跳轉失敗或者頁面會沒有內容。
query參數
#### ####路徑? key1=val1 & key2=val2....#########1.可以使用name指定路由###2.可以使用path指定路由######query是拼接在url後面的參數,沒有也沒關係######query不會#############

vue-router參數遺失的問題

params參數傳遞的時候,傳遞了設定佔位符接收的參數,位址列不會顯示並且刷新會遺失。

解決方案:可以透過this.$route.params來取得參數保存在本機

vue-router有幾個鉤子函數?具體是什麼及執行流程是怎樣的?

vue-router 提供的導航守衛主要用來透過跳轉或取消的方式守衛導航。

  • 全域路由守衛 : 可以有多個根據建立順序呼叫。
    • router.beforeEach() 全域前置守衛,每次導覽時都會觸發
    • router.afterEach() 全域後置路由守衛,每次路由跳轉完成後。 不會接受next 函數,跳轉完成已經進入到元件內了
    • router.beforResolve() 全域解析守衛,在路由跳轉前,所有元件內守衛非同步路由元件 被解析之後觸發,它同樣在每次導航時都會觸發。解析完成後導航被確定,準備開始跳轉。
  • 元件內路由守衛
    • beforeRouteEnter() 路由進入元件之前調用,該鉤子在beforeEachbeforeEnter 之後。
      此時還沒有進入元件,元件實例還沒有被建立。所以不能取得元件實例,此時 this 為 undefined,在 beforeCreate 生命週期前觸發。
    • beforeRouteUpdate() this 已經可用了,所以給 next 傳遞回呼就沒有必要了。對一個有動態參數的路徑/foo/:id,在/foo/1 和/foo/2之間跳轉的時候,由於會渲染統一的Foo元件,因此這個元件實例會被復用,這個鉤子在這種情況下可以被呼叫。
    • beforeRouteLeave()離開該元件時被呼叫,this 已經可用了,所以給 next 傳遞回調就沒有必要了
  • 獨享路由守衛
    • beforeEnter() 需要在路由設定上定義beforeEnter 守衛,此守衛只在進入路由時觸發,在beforeEach 之後緊接著執行,不會在params、query 或hash 改變時觸發。

進入元件前的呼叫的順序beforeEach()=>beforeEnter()=>beforeRouteEnter()=>beforeResolve() 這個過程不可以使用this,因為元件實例還沒有被創建,所以需要利用next函數

完整的導航解析流程
# 1.導航被觸發。
2.在失活的元件裡呼叫 beforeRouteLeave 守衛。
3.呼叫全域的 beforeEach 守衛。
4.在重複使用的元件裡呼叫 beforeRouteUpdate 守衛。
5.在路由配置裡呼叫 beforeEnter
6.解析非同步路由元件。
7.在被啟動的元件裡呼叫beforeRouteEnter
8.呼叫全域的 beforeResolve 守衛。
9.導航被確認。
10.呼叫全域的 afterEach 鉤子。
11.觸發 DOM 更新。
12.呼叫 beforeRouteEnter 守衛中傳給 next 的回呼函數,建立好的元件實例會作為回呼函數的參數傳入

【整理分享】一些vue-router相關面試題(附答案解析)

keep-alive

keep-alive可以實作元件緩存,當組件切換時不會對目前組件進行卸載。

keep-alive標籤主要有include、exclude、max三個屬性

  • includeexclude 前兩個屬性允許keep-alive有條件的進行快取
  • max可以定義元件最大的快取個數,如果超過了這個個數的話,在下一個新實例建立之前,就會以快取元件中最久沒有被存取的實例銷毀掉。

兩個生命週期activated/deactivated,用來得知目前元件是否處於活躍狀態。

keep-alive的原理快取管理特殊的掛載/卸載流程

特殊的卸載/掛載流程:activated/deactivated
# 快取管理:LRU(Least Recently Used)最近最少使用是一種淘汰演算法

特殊的卸載/掛載流程
由於不能將元件真正的卸載,所以keep-alive是將元件從原容器移到另一個假容器中,實現假卸載。掛載的時候從隱藏容器中再搬運到原容器。對應到元件的activateddeactivated生命週期
keepAlive會對內部元件(需要被快取的)進行標記

#
  • 在內部元件的vnode物件上添加shouldKeepAlive屬性,告訴渲染器卸載元件時,該元件需要緩存,不要真正卸載
  • 在內部元件的vnode物件上新增keptAlive屬性,如果元件已經緩存,添加標記,表示渲染器並不會重新掛載,直接啟動即可。

【整理分享】一些vue-router相關面試題(附答案解析)

快取策略:最近最少使用

使用Map物件cache來實作元件的緩存, key是vnode.type值,value為vnode物件,因為元件的vnode物件中存在著元件實例的參考(vnode.component#)

  • cache 前者用來存快取元件的虛擬dom集合
  • keys 後者用來儲存快取元件的key集合
  • 根據元件ID和tag產生快取Key,並在快取物件中尋找是否已快取過該元件實例。如果存在,直接取出快取值並更新該key在keys中的位置(更新key的位置是實現LRU置換策略的關鍵)。

  • 如果不存在,則在map物件中儲存該元件實例並保存key值,之後檢查快取的實例數量是否超過max設定值,超過則根據LRU置換策略刪除最近最久未使用的實例(即是下標為0的那個key)。

(學習影片分享:vuejs入門教學程式設計基礎影片

以上是【整理分享】一些vue-router相關面試題(附答案解析)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:csdn。如有侵權,請聯絡admin@php.cn刪除
Netflix:探索React(或其他框架)的使用Netflix:探索React(或其他框架)的使用Apr 23, 2025 am 12:02 AM

Netflix選擇React來構建其用戶界面,因為React的組件化設計和虛擬DOM機制能夠高效處理複雜界面和頻繁更新。 1)組件化設計讓Netflix將界面分解成可管理的小組件,提高了開發效率和代碼可維護性。 2)虛擬DOM機制通過最小化DOM操作,確保了Netflix用戶界面的流暢性和高性能。

vue.js和前端:深入研究框架vue.js和前端:深入研究框架Apr 22, 2025 am 12:04 AM

Vue.js被開發者喜愛因為它易於上手且功能強大。 1)其響應式數據綁定係統自動更新視圖。 2)組件系統提高了代碼的可重用性和可維護性。 3)計算屬性和偵聽器增強了代碼的可讀性和性能。 4)使用VueDevtools和檢查控制台錯誤是常見的調試技巧。 5)性能優化包括使用key屬性、計算屬性和keep-alive組件。 6)最佳實踐包括清晰的組件命名、使用單文件組件和合理使用生命週期鉤子。

vue.js在前端的力量:關鍵特徵和好處vue.js在前端的力量:關鍵特徵和好處Apr 21, 2025 am 12:07 AM

Vue.js是一個漸進式的JavaScript框架,適用於構建高效、可維護的前端應用。其關鍵特性包括:1.響應式數據綁定,2.組件化開發,3.虛擬DOM。通過這些特性,Vue.js簡化了開發過程,提高了應用性能和可維護性,使其在現代Web開發中備受歡迎。

vue.js比反應好嗎?vue.js比反應好嗎?Apr 20, 2025 am 12:05 AM

Vue.js和React各有優劣,選擇取決於項目需求和團隊情況。 1)Vue.js適合小型項目和初學者,因其簡潔和易上手;2)React適用於大型項目和復雜UI,因其豐富的生態系統和組件化設計。

vue.js的功能:增強前端的用戶體驗vue.js的功能:增強前端的用戶體驗Apr 19, 2025 am 12:13 AM

Vue.js通過多種功能提升用戶體驗:1.響應式系統實現數據即時反饋;2.組件化開發提高代碼復用性;3.VueRouter提供平滑導航;4.動態數據綁定和過渡動畫增強交互效果;5.錯誤處理機制確保用戶反饋;6.性能優化和最佳實踐提升應用性能。

vue.js:定義其在網絡開發中的作用vue.js:定義其在網絡開發中的作用Apr 18, 2025 am 12:07 AM

Vue.js在Web開發中的角色是作為一個漸進式JavaScript框架,簡化開發過程並提高效率。 1)它通過響應式數據綁定和組件化開發,使開發者能專注於業務邏輯。 2)Vue.js的工作原理依賴於響應式系統和虛擬DOM,優化性能。 3)實際項目中,使用Vuex管理全局狀態和優化數據響應性是常見實踐。

了解vue.js:主要是前端框架了解vue.js:主要是前端框架Apr 17, 2025 am 12:20 AM

Vue.js是由尤雨溪在2014年發布的漸進式JavaScript框架,用於構建用戶界面。它的核心優勢包括:1.響應式數據綁定,數據變化自動更新視圖;2.組件化開發,UI可拆分為獨立、可複用的組件。

Netflix的前端:React(或VUE)的示例和應用Netflix的前端:React(或VUE)的示例和應用Apr 16, 2025 am 12:08 AM

Netflix使用React作為其前端框架。 1)React的組件化開發模式和強大生態系統是Netflix選擇它的主要原因。 2)通過組件化,Netflix將復雜界面拆分成可管理的小塊,如視頻播放器、推薦列表和用戶評論。 3)React的虛擬DOM和組件生命週期優化了渲染效率和用戶交互管理。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用