vue-router——重定向-redirect、過渡動畫、路由鉤子

一.vue-router的重定向-redirect

有時候設置的路徑不一致,但是我們希望跳轉到同一個頁面,或者說是打開同一個組件。這時候我們就用到了路由的重新定向redirect參數。

redirect基本重定向

我們只要在路由配置文件中(/src/router/index.js)把原來的component換成redirect參數就可以了。我們來看一個簡單的配置。

export default new Router({
  routes: [
    {
      path: '/',
      component: Hello
    },{
      path:'/params/:newsId(\\d+)/:newsTitle',
      component:Params
    },{
      path:'/goback',
      redirect:'/'
    }
 
  ]
})

這裏我們設置了goback路由,但是它並沒有配置任何component(組件),而是直接redirect到path:’/’下了,這就是一個簡單的重新定向。

重定向時傳遞參數

vue也已經爲我們設置好重定向時傳遞參數,我們只需要在ridirect後邊的參數裏複製重定向路徑的path參數就可以了。我們來看一段代碼:

{
  path:'/params/:newsId(\\d+)/:newsTitle',
  component:Params
},{
  path:'/goParams/:newsId(\\d+)/:newsTitle',
  redirect:'/params/:newsId(\\d+)/:newsTitle'
}

已經有了一個params路由配置,我們在設置一個goParams的路由重定向,並傳遞了參數。這時候我們的路由參數就可以傳遞給params.vue組件了。參數接收方法和正常的路由接收方法一樣。

二.alias別名的使用

1.首先我們在路由配置文件裏(/src/router/index.js),給上節課的Home路徑起一個別名,jsyuyan。

{

    path: '/hi1',

    component: Hi1,

    alias:'/jsyuyan'

}

2.配置我們的<router-link>,起過別名之後,可以直接使用<router-link>標籤裏的to屬性,進行重新定向。

<router-link to="/jsyuyan">jsyuyan</router-link>

redirect和alias的區別

  • redirect:仔細觀察URL,redirect是直接改變了url的值,把url變成了真實的path路徑。
  • alias:URL路徑沒有別改變,這種情況更友好,讓用戶知道自己訪問的路徑,只是改變了<router-view>中的內容。

填個小坑:

別名請不要用在path爲’/’中,如下代碼的別名是不起作用的。

{
  path: '/',
  component: Hello,
  alias:'/home'
}

三.路由的過渡動畫

<transition>標籤

想讓路由有過渡動畫,需要在<router-view>標籤的外部添加<transition>標籤,標籤還需要一個name屬性。

<transition name="fade">

  <router-view ></router-view>

</transition>

我們在/src/App.vue文件裏添加了<transition>標籤,並給標籤起了一個名字叫fade。

css過渡類名:

組件過渡過程中,會有四個CSS類名進行切換,這四個類名與transition的name屬性有關,比如name=”fade”,會有如下四個CSS類名:

  1. fade-enter:進入過渡的開始狀態,元素被插入時生效,只應用一幀後立刻刪除。
  2. fade-enter-active:進入過渡的結束狀態,元素被插入時就生效,在過渡過程完成後移除。
  3. fade-leave:離開過渡的開始狀態,元素被刪除時觸發,只應用一幀後立刻刪除。
  4. fade-leave-active:離開過渡的結束狀態,元素被刪除時生效,離開過渡完成後被刪除。

從上面四個類名可以看出,fade-enter-active和fade-leave-active在整個進入或離開過程中都有效,所以CSS的transition屬性在這兩個類下進行設置。

那我們就在App.vue頁面里加入四種CSS樣式效果,並利用CSS3的transition屬性控制動畫的具體效果。代碼如下:

.fade-enter {

  opacity:0;

}

.fade-leave{

  opacity:1;

}

.fade-enter-active{

  transition:opacity .5s;

}

.fade-leave-active{

  opacity:0;

  transition:opacity .5s;

}

上邊的代碼設置了改變透明度的動畫過渡效果,但是默認的mode模式in-out模式,這並不是我們想要的。下面我們學一下mode模式。

過渡模式mode:

  • in-out:新元素先進入過渡,完成之後當前元素過渡離開。
  • out-in:當前元素先進行過渡離開,離開完成後新元素過渡進入。

四.mode設置和404頁面的處理

mode的兩個值

  1. histroy:當你使用 history 模式時,URL 就像正常的 url,例如 http://jsapng.com/lms/,也好看!
  2. hash:默認’hash’值,但是hash看起來就像無意義的字符排列,不太好看也不符合我們一般的網址瀏覽習慣。

404頁面的設置:

用戶會經常輸錯頁面,當用戶輸錯頁面時,我們希望給他一個友好的提示,爲此美工都會設計一個漂亮的頁面,這個頁面就是我們常說的404頁面。vue-router也爲我們提供了這樣的機制.

1.設置我們的路由配置文件(/src/router/index.js):

{

   path:'*',

   component:Error

}

這裏的path:’*’就是找不到頁面時的配置,component是我們新建的一個Error.vue的文件。

2.新建404頁面:

在/src/components/文件夾下新建一個Error.vue的文件。簡單輸入一些有關錯誤頁面的內容。

<template>

    <div>

        <h2>{{ msg }}</h2>

    </div>

</template>

<script>

export default {

  data () {

    return {

      msg: 'Error:404'

    }

  }

}

</script>

3.我們在用<router-link>瞎寫一個標籤的路徑。

<router-link to="/bbbbbb">我是瞎寫的</router-link> |

預覽一下我們現在的結果,就已經實現404頁面的效果。

五.路由中的鉤子

路由配置文件中的鉤子函數

我們可以直接在路由配置文件(/src/router/index.js)中寫鉤子函數。但是在路由文件中我們只能寫一個beforeEnter,就是在進入此路由配置時。先來看一段具體的代碼:

{

      path:'/params/:newsId(\\d+)/:newsTitle',

      component:Params,

      beforeEnter:(to,from,next)=>{

        console.log('我進入了params模板');

        console.log(to);

        console.log(from);

        next();

}

我們在params路由裏配置了bdforeEnter得鉤子函數,函數我們採用了ES6的箭頭函數,需要傳遞三個參數。我們並在箭頭函數中打印了to和from函數。具體打印內容可以在控制檯查看object。

三個參數:

  1. to:路由將要跳轉的路徑信息,信息是包含在對像裏邊的。
  2. from:路徑跳轉前的路徑信息,也是一個對象的形式。
  3. next:路由的控制參數,常用的有next(true)和next(false)。

寫在模板中的鉤子函數

在配置文件中的鉤子函數,只有一個鉤子-beforeEnter,如果我們寫在模板中就可以有兩個鉤子函數可以使用:

  • beforeRouteEnter:在路由進入前的鉤子函數。
  • beforeRouteLeave:在路由離開前的鉤子函數。
export default {

  name: 'params',

  data () {

    return {

      msg: 'params page'

    }

  },

  beforeRouteEnter:(to,from,next)=>{

    console.log("準備進入路由模板");

    next();

  },

  beforeRouteLeave: (to, from, next) => {

    console.log("準備離開路由模板");

    next();

  }

}

</script>

這是我們寫在params.vue模板裏的路由鉤子函數。它可以監控到路由的進入和路由的離開,也可以輕易的讀出to和from的值。

六.編程式導航

this.$router.go(-1) 和 this.$router.go(1)

這兩個編程式導航的意思是後退和前進,功能跟我們瀏覽器上的後退和前進按鈕一樣,這在業務邏輯中經常用到。比如條件不滿足時,我們需要後退。

router.go(-1)代表着後退,我們可以讓我們的導航進行後退,並且我們的地址欄也是有所變化的。

1.我們先在app.vue文件里加入一個按鈕,按鈕並綁定一個goback( )方法。

<button @click="goback">後退</button>

2.在我們的script模塊中寫入goback()方法,並使用this.$router.go(-1),進行後退操作。

<script>

export default {

  name: 'app',

  methods:{

    goback(){

      this.$router.go(-1);

    }

  }

}

</script>

打開瀏覽器進行預覽,這時我們的後退按鈕就可以向以前的網頁一樣後退了。

router.go(1):代表着前進,用法和後退一樣。

this.$router.push(‘/xxx ‘)

這個編程式導航都作用就是跳轉,比如我們判斷用戶名和密碼正確時,需要跳轉到用戶中心頁面或者首頁,都用到這個編程的方法來操作路由。

我們設置一個按鈕,點擊按鈕後回到站點首頁。

1.先編寫一個按鈕,在按鈕上綁定goHome( )方法。

<button @click="goHome">回到首頁</button>

2.在<script>模塊里加入goHome方法,並用this.$router.push(‘/’)導航到首頁

export default {

  name: 'app',

  methods:{

    goback(){

      this.$router.go(-1);

    },

    goHome(){

      this.$router.push('/');

    }

  }

}

注意:本文參考:技術胖jspang.com

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章