vue-router工做中經常使用基礎總結

這是我參與8月更文挑戰的第8天,活動詳情查看:8月更文挑戰vue

vue-router官方文檔vue-router

router的使用

<div id="app">
  <h1>Hello App!</h1>
  <p> <!-- 使用 router-link 組件來導航. --> <!-- 經過傳入 `to` 屬性指定連接. --> <!-- <router-link> 默認會被渲染成一個 `<a>` 標籤 --> <router-link to="/foo">Go to Foo</router-link> <router-link to="/bar">Go to Bar</router-link> </p> <!-- 路由出口 --> <!-- 路由匹配到的組件將渲染在這裏 --> <router-view></router-view> </div> // 定義路由 // 每一個路由應該映射一個組件。 其中"component" 能夠是 // 經過 Vue.extend() 建立的組件構造器, // 或者,只是一個組件配置對象。 // 咱們晚點再討論嵌套路由。 const routes = [ { path: '/foo', component: Foo }, { path: '/bar', component: Bar } ] // 建立 router 實例,而後傳 `routes` 配置 // 你還能夠傳別的配置參數, 不過先這麼簡單着吧。 const router = new VueRouter({ routes // (縮寫) 至關於 routes: routes }) 複製代碼

動態路由

  1. 什麼是動態路由?
    動態路由就是能夠接收參數數據的路由形式,路由地址的一部分是會發生變化的
  2. 如何接收動態路由傳遞的參數?
    $route.params
    經過props屬性獲取與傳遞參數數據的方式
    A.咱們能夠將props屬性設置爲true,route.params將會被設置爲組件屬性,那麼組件能夠經過props接收route.params
    B.能夠將props屬性設置爲一個對象,那麼組件能夠經過props接收對象的數據
    C.還能夠將props屬性設置爲一個函數,那麼就能夠同時將參數數據以及對象數據傳遞給組件。

image.png

編程式導航與路由傳參

// 1. 用name路徑的方式進行路由傳參
  this.$router.push({ name: 'Goods', params: { goodsID: id } })
 // 2. 用path路徑的方式進行路由傳參
   this.$router.push({path:'goods',query:{goodsID:id}})	
    //接收this.$route.query.goodsID

複製代碼

Hash與History模式

image.png

vue- router默認hash模式, ur使用#後面定位路由,對seo不利,設置history,就可使用普通的url模式
history模式即普通url模式,這種模式充分利用history.pushState API來完成URL跳轉而無須從新加載頁面編程

使用:

const router = new VueRouter({
  mode: 'history',
  routes: [...]
})

複製代碼

二者的區別

  1. hash模式url帶#號,history模式不帶#號
  2. 若是考慮url規範的話,那就須要使用history模式,由於history模式不帶#,是個正常的url,適合開發習慣
  3. 把用Vue和React作的頁面分享至第三方APP,有的app是不容許帶url的,因此要用history模式
  4. 使用history的一個問題就是,在訪問二級頁面的時候,作刷新操做會出現404錯誤,那麼就須要和後端人配合讓特配置一下Apache或者是Nginx的url重定向,重定向到你的首頁路由

路由守衛

能夠用來作用戶在沒有登陸註冊時的攔截
你可使用 router.beforeEach 註冊一個全局前置守衛:後端

const router = new VueRouter({ ... })

router.beforeEach((to, from, next) => {
  // ...
})

複製代碼

每一個守衛方法接收三個參數:markdown

  • to: Route: 即將要進入的目標 路由對象
  • from: Route: 當前導航正要離開的路由
  • next: Function: 必定要調用該方法來 resolve 這個鉤子。執行效果依賴 next 方法的調用參數。

組件中的守衛

  • beforeRouteEnter
  • beforeRouteUpdate
  • beforeRouteLeave
const Foo = {
  template: `...`,
  beforeRouteEnter (to, from, next) {
    // 在渲染該組件的對應路由被 confirm 前調用
    // 不!能!獲取組件實例 `this`
    // 由於當守衛執行前,組件實例還沒被建立
  },
  beforeRouteUpdate (to, from, next) {
    // 在當前路由改變,可是該組件被複用時調用
    // 舉例來講,對於一個帶有動態參數的路徑 /foo/:id,在 /foo/1 和 /foo/2 之間跳轉的時候,
    // 因爲會渲染一樣的 Foo 組件,所以組件實例會被複用。而這個鉤子就會在這個狀況下被調用。
    // 能夠訪問組件實例 `this`
  },
  beforeRouteLeave (to, from, next) {
    // 導航離開該組件的對應路由時調用
    // 能夠訪問組件實例 `this`
  }
}

複製代碼
相關文章
相關標籤/搜索