vue路由及路由鉤子函數---vue-router

歡迎加我技術交流QQ群 :811956471

一、vue-router是什么

通俗的說,vue-router就是WebApp的鏈接路徑管理系統,本質 就是建立起url和頁面之間的映射關系。而舍棄了一般描點連接、用a鏈接去實現頁面跳轉的方法。

二、vue-router模式

1、Hash模式:

vue-router 默認 是hash 模式 ,當 URL 改變時,頁面不會重新加載。 hash(#)是URL 的錨點,改變#后的部分,瀏覽器只會滾動到相應位置,不會重新加載網頁。

2、History模式:

hash模式會在url中自帶#,可以用路由的 history 模式,只需要在配置路由規則時,加入"mode: 'history'",

const router = new VueRouter({
  mode: 'history',
  routes: [...]
})
注意:種模式要玩好,還需要后臺配置支持

三、解決沒有匹配到頁面出現404問題

//方法一:在路由規則如下代碼,使其直接跳轉到首頁
{path: "*", redirect: "/"}
//方法二:做一個錯誤處理組件,跳轉到這里
{ path:'*', component:Error}

四、vue-router使用方式

1.安裝 npm i vue-router -S
2.在main.js中引入 import VueRouter from 'vue-router';
3:引用Vue.use(VueRouter);
4.在 router文件中index.js 中 創建路由對象并配置路由規則 let router = new VueRouter({routes:[{path:'/home',component:Home}]});

五、$route(路由) 和$router(路由器) 的區別

1.$route 是“路由信息對象”,包括 path,params,hash,query,fullPath,matched,name 等路由信息參數、就是配置的一堆路由規則、路徑。
2.$router 是“路由實例”對象,即使用 new VueRouter創建的實例,包括了路由的跳轉方法,鉤子函數等,一堆路由規則、路徑組成了路由器。

六、編程式導航(說白了就是用腳本業務邏輯實現頁面跳轉)

1.比如需要用程序控制跳轉有以下方法:

(1)、字符串匹配跳轉


html:
<button @click="gpto_foo">Go to Foo</button>
js:
methods: {
    gpto_foo:function () {
    this.$router.push('foo')//親測 這種不支持name匹配,  這里的字符串是路徑path,不是router配置里的name
    }
}
//這種方法如果需要傳遞參數:
//步驟一:
{
  path: "/Foo/:id",
  name: 'Fooa',
  component: Foo,
},
//步驟二:
this.$router.push('Foo/78')
//或者:
this.$router.push('Foo/'+this.userid)

(2)、對象方法

//第一 :router配置里的name匹配跳轉 
<button @click="gpto_foo">Go to Foo</button>
this.$router.push({ name: 'Fooa', params: { userId: "77" }})

//第二:router配置里的path匹配跳轉 
<button @click="gpto_foo">Go to Foo</button>
this.$router.push({ path: 'Foo', query: { userId: this.userid }})

七、導航守衛

簡介:主要是在導航跳轉的時候做一些操作,比如可以做登錄的攔截,而鉤子函數根據其生效的范圍可以分為 :全局路由守衛、路由獨享衛和組件內路由衛。

(1)、全局路由守衛:beforeEach、afterEach

-- 全局前置守衛beforeEach:

//在所有路由跳轉之前、初始化執行
router.beforeEach((to, from, next) => {
const isLogin='判斷用戶是否登錄的邏輯代碼';
  if (to.meta.auth&&isLogin){
   next()
  }else{
   next({ name: 'Login' })
}
 // 如果該路由需要登錄后訪問,且用戶未登錄跳轉登錄頁面
})

-- 全局后置守衛afterEach

//在所有路由初始化、跳轉之后執行
router.afterEach((to, from) => {
  document.title=to.meta.title//設置每個頁面的頁面標題
})

(2)、路由獨享守衛:beforeEnter,沒有后置守衛

//用法同全局路由守衛:beforeEach
const router = new VueRouter({
  routes: [
    {
      path: '/foo',
      component: Foo,
      beforeEnter: (to, from, next) => {
        // ...
      }
    }
  ]
})

(3)、組件內的守衛:beforeRouteEnter、beforeRouteUpdate、beforeRouteLeave。這三個路由是在組件(頁面中)使用。

//通過路由匹配規則,進入組件時調用
 beforeRouteEnter(to, from, next) {
    // 沒有 `this`, 因為當守衛執行前,組件實例還沒被創建
   const isLogin='判斷用戶是否登錄的邏輯代碼';
     if (to.meta.auth&&isLogin){
     next()
    }else{
     next({ name: 'Login' })
    }
    // 如果該路由需要登錄后訪問,且用戶未登錄跳轉登錄頁面
  },

  // 在當前路由改變,但是該組件被復用時調用
  beforeRouteUpdate(to, from, next) {
    // 舉例來說,對于一個帶有動態參數的路徑 /foo/:id,在 /foo/1 和 /foo/2 之間跳轉的時候,
    // 由于會渲染同樣的 Foo 組件,因此組件實例會被復用。而這個鉤子就會在這個情況下被調用。
    // 可以訪問組件實例 `this`
  },

   // 通過路由匹配規則,離開組件時調用,一般用于提示用戶是否離開當前頁面,或者清除當前組件定時器等
  beforeRouteLeave(to, from, next) {
    // 可以訪問組件實例 `this`
  }
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,563評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,694評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,672評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,965評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,690評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,019評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,013評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,188評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,718評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,438評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,667評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,149評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,845評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,252評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,590評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,384評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380