天天看點

Vue路由 —— vue-router一級路由配置聲明式導航重定向

Vue路由 —— vue-router一級路由配置聲明式導航重定向

         在上一篇内容講到關于單頁面元件的内容,同時也附上補充講了關于單頁面(SPA)和多頁面(MPA)之間的優缺點,在本篇目當中就要來講這個路由(vue-router),通過路由來實作頁面的局部切換或者更改:附上vue-router文檔 —— 官方文檔 | Vue Router

一級路由配置

        可以在 main.js 中引入路由子產品,這些其實在建立項目的時候就已經幫我們處理好了的;

Vue路由 —— vue-router一級路由配置聲明式導航重定向

         在 /router/index.js 中來處理一下,來通過簡單的一部分對這個路由檔案進行了解:

Vue路由 —— vue-router一級路由配置聲明式導航重定向

         然後将項目運作起來時,會發現在浏覽器請求url :http://localhost:8080/ 的時候會發現請求的url會時變成 http://localhost:8080/#/

        現在來将原先 /views/HomeView.vue 檔案進行一個簡化;

<!-- /views/HomeView.vue -->
<template>
  <div class="home">
    <img alt="Vue logo" src="../assets/logo.png">
  </div>
</template>
           

        通過路由資訊的配置,将HomeView.vue元件引入,當path為Home時,即請求為http://localhost:8080/#/home 的時候就會對應的切換到HomeView.vue 元件,那麼下面來進行一下嘗試:

        在 /router/index.js 中配置:

Vue路由 —— vue-router一級路由配置聲明式導航重定向

        這樣一來通過請求 http://localhost:8080/#/home 能否切換到HomeView元件呢?

Vue路由 —— vue-router一級路由配置聲明式導航重定向

        很顯然是失敗了,沒有将HomeView元件中的内容顯示出來,這是為什麼呢?

        還記得在前面講過這個項目的入口檔案 main.js ,再拿出來看一看:

Vue路由 —— vue-router一級路由配置聲明式導航重定向

       即使在路由配置當中通過path: ' /home ',是可以比對到HomeView元件,但關鍵是這個HomeView元件應該如何去顯示,顯示在哪裡呢?

        如果要去顯示就得到App.vue中去顯示,App.vue同時要預留一個位置給HomeView元件來進行顯示内容;通過 <router-view></router-view> 來進行預留位置;

<!-- App.vue -->
<template>
  <div id="app">
    <sHello></sHello>
    <button>按鈕</button>
    <router-view></router-view>
  </div>
</template>

<script>
import hello from './components/SayHello.vue'
import Vue from 'vue'

Vue.component('sHello', hello)

export default {}
</script>
<style>
  button {
    background: yellow;
  }
</style>
           

        現在來再次測試運作來看一下HomeView元件是否成功了 —— 成功将HomeView元件顯示出來了!

Vue路由 —— vue-router一級路由配置聲明式導航重定向

        下面就來用前面所講到的内容來完成一個聲明式導航!

聲明式導航

        講到聲明式導航大家已經了解和清除了,那麼不再贅述,先來看一下簡單的效果:

Vue路由 —— vue-router一級路由配置聲明式導航重定向

        當路由進行變化時,對應的頁面也将随即切換,當請求的url位址為 localhost:8080/#/home 時頁面會切換到首頁頁面(HomeView),服務(ServerView)和關于(AboutView) 這個兩個同理,那麼下面先來編寫這幾個頁面:

1)在 /views/ 目錄下編寫如下幾個頁面檔案:

<!-- HomeView.vue -->
<template>
  <div class="home">
    這是首頁頁面
  </div>
</template>
           
<!--ServerView.vue-->
<template>
    <div class="server">
      這是服務頁面
    </div>
</template>
           
<!--AboutView.vue-->
<template>
  <div class="about">
    這是關于頁面
  </div>
</template>
           

2)在 /router/index.js 檔案中配置路由資訊:

import Vue from 'vue'
import VueRouter from 'vue-router'
// 引入元件
import Home from '../views/HomeView.vue'
import Server from '../views/ServerView.vue'
import About from '../views/AboutView.vue'

Vue.use(VueRouter)

const routes = [
  {
    path: '/'
  },
  {
    path: '/home',
    component: Home
  },
  {
    path: '/server',
    component: Server
  },
  {
    path: '/about',
    component: About
  }
]

const router = new VueRouter({
  routes
})

export default router
           

3)編寫聲明式導航元件

        建立 /components/TabBar.vue 檔案作為導航元件檔案,在 a标簽 中通過 #/path路徑 就可以進行跳轉的切換,這裡的預編譯器選擇是 "scss" ;

<template>
    <nav>
        <ul>
            <li><a href="#/home" target="_blank" rel="external nofollow" >首頁</a></li>
            <li><a href="#/server" target="_blank" rel="external nofollow" >服務</a></li>
            <li><a href="#/about" target="_blank" rel="external nofollow" >關于</a></li>
        </ul>
    </nav>
</template>

<script>
export default {

}
</script>

<style >
    nav{
        margin: 0 auto;
        padding: 0;
        border-bottom: 1px solid black;
    }
    ul{
        display: flex;
        li{
            flex:1;
            text-align: center;
            list-style: none;
            a{
                text-decoration: none;
            }
        }
    }
</style>
           

4)将聲明式導航元件引入App.vue中,最後不要忘記在 App.vue 中預留一個顯示的容器 <router-view></router-view> 來讓其有顯示的位置,否則不報錯,也不會顯示出來;

<!--App.vue-->
<template>
  <div id="app">
    <tabBar></tabBar>
    <router-view></router-view>
  </div>
</template>

<script>
import tabbar from './components/TabBar'
import Vue from 'vue'

Vue.component('tabBar', tabbar)

export default {

}
</script>
<style>
  button {
    background: yellow;
  }
</style>
           

5)項目測試運作:

Vue路由 —— vue-router一級路由配置聲明式導航重定向
  •  點選【首頁】: 切換路由時對應的頁面也會随即切換到這個首頁頁面;
Vue路由 —— vue-router一級路由配置聲明式導航重定向
  • 點選【服務】,點選【關于】:測試OK!
Vue路由 —— vue-router一級路由配置聲明式導航重定向

location.hash

        通過導航點選可以進行一個切換,對應的路經發生變化,window.onhashchange方法能夠監聽到錨點的改變該函數就會觸發回調,在回調中擷取到location.hash的值,這樣一來就可以對導航文字進行效果處理,如高亮顯示;——  [ #是錨點,#/路徑 是hash(哈希) ]

Vue路由 —— vue-router一級路由配置聲明式導航重定向

        知道了這樣一個原理後,我們不會這麼來操作,因為Vue已經提供好了,通過 <router-link> 标簽,下面來調整 TabBar.vue 中的代碼段:

<!-- App.vue -->
<template>
    <nav>
        <ul>
            <router-link to="/home" tag="li">首頁</router-link>
            <router-link to="/server" tag="li">服務</router-link>
            <router-link to="/about" tag="li">關于</router-link>
        </ul>
    </nav>
</template>
           

        進行測試運作檢視一下:

Vue路由 —— vue-router一級路由配置聲明式導航重定向

        觀察可以看到原先并沒有設定它的類選擇器進行樣式顯示,這樣一來可以進行高亮效果的顯示,隻需要進行樣式的添加即可:

<style >
    .router-link-active{
        color:skyblue;
        font-weight: bold;
    }
    ...
</style>
           
Vue路由 —— vue-router一級路由配置聲明式導航重定向

        可以看到選擇的這個導航已經有了高亮的文字顯示了,那麼如果需要避免沖突,可以自行的來設定這個類選擇器的樣式,給 <router-link> 标簽中添加active-class屬性;如下: 

<template>
    <nav>
        <ul>
            <router-link to="/home" tag="li" active-class="active-chosen">首頁</router-link>
            <router-link to="/server" tag="li" active-class="active-chosen">服務</router-link>
            <router-link to="/about" tag="li" active-class="active-chosen">關于</router-link>
        </ul>
    </nav>
</template>
<script>
    export default {}
</script>
<style >
    .active-chosen{
        color: skyblue;
        font-weight: bold;
    }
</style>
           
Vue路由 —— vue-router一級路由配置聲明式導航重定向

        也許讀者已經發現了一個問題,當進入頁面的時候不應該就是【首頁】内容了嗎?怎麼還需要再點選一次首頁才能看到【首頁】呢?這就是下面要來講到的 "重定向" !

重定向

        當進入頁面的時候位址是 : http://localhost:8080/#/ ,那麼現如今我們的首頁位址則是 http://localhost:8080/#/home,則當進入頁面時就定制重定向到首頁的位址即可:

        在 /router/index.js 中添加路由配置資訊:

...
const routes = [
  {
    path: '/',
    redirect: '/home'
  },
...
           

        通過 redirect 将路徑 " / " 進行重定向到 " /home ",接下來的再運作測試項目的時候進入的頁面就是首頁了;

Vue路由 —— vue-router一級路由配置聲明式導航重定向

        以上就是本篇目的全部内容了,通過vue-router了解到了基礎的路由資訊、一級路由配置、聲明式導航和在聲明式導航中了解到了路由切換會觸發location.hash執行以及路由的重定向問題,再次感謝大家的支援!

Vue路由 —— vue-router一級路由配置聲明式導航重定向

繼續閱讀