路由 router-view


路由,其實就是指向的意思,當我點擊頁面上的home按鈕時,頁面中就要顯示home的內容,如果點擊頁面上的about 按鈕,頁面中就要顯示about 的內容。Home按鈕 => home 內容, about按鈕 => about 內容,也可以說是一種映射. 所以在頁面上有兩個部分,一個是點擊部分,一個是點擊之后,顯示內容的部分。
點擊之后,怎么做到正確的對應,比如,我點擊home 按鈕,頁面中怎么就正好能顯示home的內容。這就要在js 文件中配置路由。

路由中有三個基本的概念 route, routes, router。

1, route,它是一條路由,由這個英文單詞也可以看出來,它是單數, Home按鈕 => home內容, 這是一條route, about按鈕 => about 內容, 這是另一條路由。

2, routes 是一組路由,把上面的每一條路由組合起來,形成一個數組。[{home 按鈕 =>home內容 }, { about按鈕 => about 內容}]

3, router 是一個機制,相當於一個管理者,它來管理路由。因為routes 只是定義了一組路由,它放在哪里是靜止的,當真正來了請求,怎么辦? 就是當用戶點擊home 按鈕的時候,怎么辦?這時router 就起作用了,它到routes 中去查找,去找到對應的 home 內容,所以頁面中就顯示了 home 內容。

4,客戶端中的路由,實際上就是dom 元素的顯示和隱藏。當頁面中顯示home 內容的時候,about 中的內容全部隱藏,反之也是一樣。客戶端路由有兩種實現方式:基於hash 和基於html5 history api.

vue-router中的路由也是基於上面的內容來實現的

在vue中實現路由還是相對簡單的。因為我們頁面中所有內容都是組件化的,我們只要把路徑和組件對應起來就可以了,然后在頁面中把組件渲染出來。

1, 頁面實現(html模版中)

在vue-router中, 我們看到它定義了兩個標簽<router-link> 和<router-view>來對應點擊和顯示部分。<router-link> 就是定義頁面中點擊的部分,<router-view> 定義顯示部分,就是點擊后,區配的內容顯示在什么地方。所以 <router-link> 還有一個非常重要的屬性 to,定義點擊之后,要到哪里去, 如:<router-link to="/home">Home</router-link>

2, js 中配置路由

首先要定義route, 一條路由的實現。它是一個對象,由兩個部分組成: path和component. path 指路徑,component 指的是組件。如:{path:’/home’, component: home}

我們這里有兩條路由,組成一個routes:

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

最后創建router 對路由進行管理,它是由構造函數 new vueRouter() 創建,接受routes 參數。

const router = new VueRouter({
routes // routes: routes 的簡寫
})

配置完成后,把router 實例注入到 vue 根實例中,就可以使用路由了

const app = new Vue({
router
}).$mount('#app')

執行過程:當用戶點擊 router-link 標簽時,會去尋找它的 to 屬性, 它的 to 屬性和 js
中配置的路徑{ path: '/home', component: Home} path 一一對應,從而找到了匹配的組件, 最后把組件渲染到
<router-view> 標簽所在的地方。所有的這些實現才是基於hash 實現的。

vue-cli 創建一個項目體驗一下, 當然不要忘記安裝vue-router

1, 在src 目錄下新建兩個組件,home.vue 和 about.vue

<template>
<div>
<h1>home</h1>
<p>{{msg}}</p>
</div>
</template>
<script>
export default {
data () {
return {
msg: "我是home 組件"
}
}
}
</script>

<template>
<div>
<h1>about</h1>
<p>{{aboutMsg}}</p>
</div>
</template>
<script>
export default {
data () {
return {
aboutMsg: '我是about組件'
}
}
}
</script>

2, 在 App.vue中 定義<router-link > 和 </router-view>

<template>
<div id="app">
<img src="./assets/logo.png">
<header>
<!-- router-link 定義點擊后導航到哪個路徑下 -->
<router-link to="/home">Home</router-link>
<router-link to="/about">About</router-link>
</header>
<!-- 對應的組件內容渲染到router-view中 -->
<router-view></router-view>
</div>
</template>

<script>
export default {

}
</script>

3, 在 src目錄下再新建一個router.js 定義router, 就是定義 路徑到 組件的 映射。

import Vue from "vue";
import VueRouter from "vue-router";

// 引入組件
import home from "./home.vue";
import about from "./about.vue";

// 要告訴 vue 使用 vueRouter
Vue.use(VueRouter);

const routes = [
{
path:"/home",
component: home
},
{
path: "/about",
component: about
}
]

var router = new VueRouter({
routes
})
export default router;

4, 把路由注入到根實例中,啟動路由。這里其實還有一種方法,就像vuex store 注入到根實例中一樣,我們也可以把vueRouter 直接注入到根實例中。在main.js中引入路由,注入到根實例中。

import Vue from 'vue'
import App from './App.vue'

// 引入路由
import router from "./router.js"
new Vue({
el: '#app',
router, // 注入到根實例中
render: h => h(App)
})

5, 這時點擊頁面上的home 和about 可以看到組件來回切換。但是有一個問題,當首次進入頁面的時候,頁面中並沒有顯示任何內容。這是因為首次進入頁面時,它的路徑是 '/',我們並沒有給這個路徑做相應的配置。一般,頁面一加載進來都會顯示home頁面,我們也要把這個路徑指向home組件。但是如果我們寫{ path: '/', component: Home },vue 會報錯,因為兩條路徑卻指向同一個方向。這怎么辦?這需要重定向,所謂重定向,就是重新給它指定一個方向,它本來是訪問 / 路徑,我們重新指向‘/home’, 它就相當於訪問 '/home', 相應地, home組件就會顯示到頁面上。vueRouter中用 redirect 來定義重定向。
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM