vue面試題之二:路由 vue-router 面試題

2. vue路由面試題

1. mvvm框架是什么煞聪?

mvvm即Model-View-ViewModel,mvvm的設(shè)計(jì)原理是基于mvc的

MVVM是Model-View-ViewModel的縮寫伞插,Model代表數(shù)據(jù)模型負(fù)責(zé)業(yè)務(wù)邏輯和數(shù)據(jù)封裝,View代表UI組件負(fù)責(zé)界面和顯示,ViewModel監(jiān)聽(tīng)模型數(shù)據(jù)的改變和控制視圖行為写妥,處理用戶交互,簡(jiǎn)單來(lái)說(shuō)就是通過(guò)雙向數(shù)據(jù)綁定把View層和Model層連接起來(lái)审姓。在MVVM架構(gòu)下珍特,View和Model沒(méi)有直接聯(lián)系,而是通過(guò)ViewModel進(jìn)行交互魔吐,我們只關(guān)注業(yè)務(wù)邏輯扎筒,不需要手動(dòng)操作DOM莱找,不需要關(guān)注View和Model的同步工作

2. vue-router是什么?有哪些組件砸琅?
  • Vue Router 是 Vue.js 官方的路由管理器宋距。它和 Vue.js 的核心深度集成,讓構(gòu)建單頁(yè)面應(yīng)用變得易如反掌症脂。
  • <router-link><router-view><keep-alive>
3. active-class 是哪個(gè)組件的屬性谚赎?

active-class是router-link終端屬性,用來(lái)做選中樣式的切換诱篷,當(dāng)router-link標(biāo)簽被點(diǎn)擊時(shí)將會(huì)應(yīng)用這個(gè)樣式

4. 怎么定義vue-router的動(dòng)態(tài)路由壶唤?怎么獲取傳過(guò)來(lái)的值?
  • 動(dòng)態(tài)路由的創(chuàng)建棕所,主要是使用path屬性過(guò)程中闸盔,使用動(dòng)態(tài)路徑參數(shù),以冒號(hào)開(kāi)頭琳省,如下:
{
  path: '/details/:id'
  name: 'Details'
  components: Details
}

訪問(wèn)details目錄下的所有文件迎吵,如果details/a,details/b等针贬,都會(huì)映射到Details組件上击费。

  • 當(dāng)匹配到/details下的路由時(shí),參數(shù)值會(huì)被設(shè)置到this.$route.params下桦他,所以通過(guò)這個(gè)屬性可以獲取動(dòng)態(tài)參數(shù)
console.log(this.$route.params.id)
5. vue-router有哪幾種導(dǎo)航鉤子蔫巩?
  • 全局前置守衛(wèi)
const router = new VueRouter({})
router.beforeEach((to, from, next) = {
  // to do somethings
})
  • to:Route,代表要進(jìn)入的目標(biāo),它是一個(gè)路由對(duì)象快压。

  • from:Route,代表當(dāng)前正要離開(kāi)的路由圆仔,也是一個(gè)路由對(duì)象

  • next:Function,必須需要調(diào)用的方法,具體的執(zhí)行效果則依賴next方法調(diào)用的參數(shù)

    • next():進(jìn)入管道中的下一個(gè)鉤子蔫劣,如果全部的鉤子執(zhí)行完了坪郭,則導(dǎo)航的狀態(tài)就是comfirmed(確認(rèn)的)
    • next(false):終端當(dāng)前的導(dǎo)航。如瀏覽器URL改變拦宣,那么URL會(huì)充值到from路由對(duì)應(yīng)的地址截粗。
    • next('/')||next({path:'/'}):跳轉(zhuǎn)到一個(gè)不同的地址。當(dāng)前導(dǎo)航終端鸵隧,執(zhí)行新的導(dǎo)航绸罗。
* next 方法必須調(diào)用,否則鉤子函數(shù)無(wú)法resolved
  • 全局后置鉤子
router.afterEach((to, from) = {
 // to do somethings
})
  • 后置鉤子并沒(méi)有next函數(shù)豆瘫,也不會(huì)改變導(dǎo)航本身珊蟀。

  • 路由獨(dú)享鉤子

    • beforEnter
const router = new VueRouter({
  routes: [
    {
      path: '/home',
      component: Home,
      beforeEnter: (to, from, next) = {
        // to do somethings
        // 參數(shù)與全局守衛(wèi)參數(shù)一樣
        }
    }
  ]
})
  • 組件內(nèi)導(dǎo)航鉤子
const Home = {
  template: `<div</div`,
  beforeRouteEnter(to, from, next){
    // 在渲染該組件的對(duì)應(yīng)路由被 confirm 前調(diào)用
    // 不能獲取組件實(shí)例 ‘this’,因?yàn)楫?dāng)守衛(wèi)執(zhí)行前育灸,組件實(shí)例還沒(méi)被創(chuàng)建
  },
  beforeRouteUpdate(to, from, next){
    // 在當(dāng)前路由改變腻窒,但是該組件被復(fù)用時(shí)調(diào)用
    // 例:對(duì)于一個(gè)動(dòng)態(tài)參數(shù)的路徑 /home/:id,在/home/1 和 /home/2 之間跳轉(zhuǎn)的時(shí)候
    // 由于會(huì)渲染同樣的 Home 組件,因此組件實(shí)例會(huì)被復(fù)用磅崭,而這個(gè)鉤子就會(huì)在這個(gè)情況下被調(diào)用儿子。
    // 可以訪問(wèn)組件實(shí)例 'this'
  },
  beforeRouteLeave(to, from, next){
    // 導(dǎo)航離開(kāi)該組件的對(duì)應(yīng)路由時(shí)調(diào)用
    // 可以訪問(wèn)組件實(shí)例 'this'
  }
}
  • beforeRouterEnter不能訪問(wèn)this,因?yàn)槭匦l(wèi)在導(dǎo)航確認(rèn)前被調(diào)用砸喻,因此新組建還沒(méi)有被創(chuàng)建,可以通過(guò)傳一個(gè)回調(diào)給 next 來(lái)訪問(wèn)組件實(shí)例柔逼。在導(dǎo)航被確認(rèn)的時(shí)候執(zhí)行回調(diào),并把實(shí)例作為回調(diào)的方法參數(shù)割岛。
const Home = {
  template: `<div</div`,
  beforeRouteEnter(to, from, next){
    next( vm = {
      // 通過(guò) 'vm' 訪問(wèn)組件實(shí)例
    })
  }
}
6. $route和 $router的區(qū)別是什么愉适?
  • router為VueRouter的實(shí)例,是一個(gè)全局路由對(duì)象癣漆,包含了路由跳轉(zhuǎn)的方法维咸、鉤子函數(shù)等。
  • route 是路由信息對(duì)象||跳轉(zhuǎn)的路由對(duì)象惠爽,每一個(gè)路由都會(huì)有一個(gè)route對(duì)象癌蓖,是一個(gè)局部對(duì)象,包含path,params,hash,query,fullPath,matched,name等路由信息參數(shù)婚肆。
7. vue-router響應(yīng)路由參數(shù)的變化
  • 用watch 檢測(cè)
// 監(jiān)聽(tīng)當(dāng)前路由發(fā)生變化的時(shí)候執(zhí)行
watch: {
  $route(to, from){
    console.log(to.path)
    // 對(duì)路由變化做出響應(yīng)
  }
}
  • 組件內(nèi)導(dǎo)航鉤子函數(shù)
beforeRouteUpdate(to, from, next){
  // to do somethings
}
8. vue-router 傳參
  • Params
    • 只能使用name费坊,不能使用path
    • 參數(shù)不會(huì)顯示在路徑上
    • 瀏覽器強(qiáng)制刷新參數(shù)會(huì)被清空,
  // 傳遞參數(shù)
  this.$router.push({
    name: Home旬痹,
    params: {
        number: 1 ,
        code: '999'
    }
  })
  // 接收參數(shù)
  const p = this.$route.params
  • Query:

    • 參數(shù)會(huì)顯示在路徑上,刷新不會(huì)被清空
    • name 可以使用path路徑
// 傳遞參數(shù)
this.$router.push({
  name: Home讨越,
  query: {
  number: 1 ,
  code: '999'
}
                  })
// 接收參數(shù)
const q = this.$route.query
9. vue-router的兩種模式
  • hash

    • 原理是onhashchage事件两残,可以在window對(duì)象上監(jiān)聽(tīng)這個(gè)事件
window.onhashchange = function(event){
  console.log(event.oldURL, event.newURL)
  let hash = location.hash.slice(1)
}
  • history

    • 利用了HTML5 History Interface 中新增的pushState()和replaceState()方法。
    • 需要后臺(tái)配置支持把跨。如果刷新時(shí)人弓,服務(wù)器沒(méi)有響應(yīng)響應(yīng)的資源,會(huì)刷出404着逐,
10. vue-router實(shí)現(xiàn)路由懶加載(動(dòng)態(tài)加載路由)
  • 把不同路由對(duì)應(yīng)的組件分割成不同的代碼塊崔赌,然后當(dāng)路由被訪問(wèn)時(shí)才加載對(duì)應(yīng)的組件即為路由的懶加載,可以加快項(xiàng)目的加載速度耸别,提高效率
const router = new VueRouter({
  routes: [
    {
      path: '/home',
      name: 'Home'健芭,
      component:() = import('../views/home')
        }
  ]
})

以上是經(jīng)過(guò)參考很多同行分享與官方文檔,匯總的一份總結(jié)秀姐,如有不對(duì)慈迈,請(qǐng)指出,最后感謝大家觀看省有,求點(diǎn)贊痒留,求分享谴麦,求評(píng)論,求打賞~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末伸头,一起剝皮案震驚了整個(gè)濱河市匾效,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌恤磷,老刑警劉巖面哼,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異碗殷,居然都是意外死亡精绎,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門锌妻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)代乃,“玉大人,你說(shuō)我怎么就攤上這事仿粹「橄牛” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵吭历,是天一觀的道長(zhǎng)堕仔。 經(jīng)常有香客問(wèn)我,道長(zhǎng)晌区,這世上最難降的妖魔是什么摩骨? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮朗若,結(jié)果婚禮上恼五,老公的妹妹穿的比我還像新娘。我一直安慰自己哭懈,他們只是感情好灾馒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著遣总,像睡著了一般睬罗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上旭斥,一...
    開(kāi)封第一講書(shū)人閱讀 51,482評(píng)論 1 302
  • 那天容达,我揣著相機(jī)與錄音,去河邊找鬼垂券。 笑死董饰,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播卒暂,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼啄栓,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了也祠?” 一聲冷哼從身側(cè)響起昙楚,我...
    開(kāi)封第一講書(shū)人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎诈嘿,沒(méi)想到半個(gè)月后堪旧,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡奖亚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年淳梦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片昔字。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡爆袍,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出作郭,到底是詐尸還是另有隱情陨囊,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布夹攒,位于F島的核電站蜘醋,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏咏尝。R本人自食惡果不足惜压语,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望编检。 院中可真熱鬧无蜂,春花似錦、人聲如沸蒙谓。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)累驮。三九已至,卻和暖如春舵揭,著一層夾襖步出監(jiān)牢的瞬間谤专,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工午绳, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留置侍,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蜡坊,于是被迫代替她去往敵國(guó)和親杠输。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容