什麼是路由
- **後端路由:**對于普通的網站,所有的超連結都是URL位址,所有的URL位址都對應伺服器上對應的資源;
- **前端路由:**對于單頁面應用程式來說,主要通過URL中的hash(#号)來實作不同頁面之間的切換,同時,hash有一個特點:HTTP請求中不會包含hash相關的内容;是以,單頁面程式中的頁面跳轉主要用hash實作;
- 在單頁面應用程式中,這種通過hash改變來切換頁面的方式,稱作前端路由(差別于後端路由);
在 vue 中使用 vue-router
- 導入 vue-router 元件類庫:
<!-- 1. 導入 vue-router 元件類庫 -->
<script src="./lib/vue-router-2.7.0.js"></script>
- 使用 router-link 元件來導航
<!-- 2. 使用 router-link 元件來導航 -->
<router-link to="/login">登入</router-link>
<router-link to="/register">注冊</router-link>
- 使用 router-view 元件來顯示比對到的元件
<!-- 3. 使用 router-view 元件來顯示比對到的元件 -->
<router-view></router-view>
- 建立使用
建立元件Vue.extend
// 4.1 使用 Vue.extend 來建立登入元件
var login = Vue.extend({
template: '<h1>登入元件</h1>'
});
// 4.2 使用 Vue.extend 來建立注冊元件
var register = Vue.extend({
template: '<h1>注冊元件</h1>'
});
- 建立一個路由 router 執行個體,通過 routers 屬性來定義路由比對規則
// 5. 建立一個路由 router 執行個體,通過 routers 屬性來定義路由比對規則
var router = new VueRouter({
routes: [
{ path: '/login', component: login },
{ path: '/register', component: register }
]
});
- 使用 router 屬性來使用路由規則
// 6. 建立 Vue 執行個體,得到 ViewModel
var vm = new Vue({
el: '#app',
router: router // 使用 router 屬性來使用路由規則
});
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="./lib/vue-2.4.0.js"></script>
<!-- 1. 安裝 vue-router 路由子產品 -->
<script src="./lib/vue-router-3.0.1.js"></script>
<style>
.router-link-active,
.myactive {
color: red;
font-weight: 800;
font-style: italic;
font-size: 80px;
text-decoration: underline;
background-color: green;
}
.v-enter,
.v-leave-to {
opacity: 0;
transform: translateX(140px);
}
.v-enter-active,
.v-leave-active {
transition: all 0.5s ease;
}
</style>
</head>
<body>
<div id="app">
<!-- <a href="#/login">登入</a> -->
<!-- <a href="#/register">注冊</a> -->
<!-- router-link 預設渲染為一個a 标簽 -->
<router-link to="/login" tag="span">登入</router-link>
<router-link to="/register">注冊</router-link>
<!-- 這是 vue-router 提供的元素,專門用來 當作占位符的,将來,路由規則,比對到的元件,就會展示到這個 router-view 中去 -->
<!-- 是以: 我們可以把 router-view 認為是一個占位符 -->
<transition mode="out-in">
<router-view></router-view>
</transition>
</div>
<script>
// 元件的模闆對象
var login = {
template: '<h1>登入元件</h1>'
}
var register = {
template: '<h1>注冊元件</h1>'
}
/* Vue.component('login', {
template: '<h1>登入元件</h1>'
}) */
// 2. 建立一個路由對象, 當 導入 vue-router 包之後,在 window 全局對象中,就有了一個 路由的構造函數,叫做 VueRouter
// 在 new 路由對象的時候,可以為 構造函數,傳遞一個配置對象
var routerObj = new VueRouter({
// route // 這個配置對象中的 route 表示 【路由比對規則】 的意思
routes: [ // 路由比對規則
// 每個路由規則,都是一個對象,這個規則對象,身上,有兩個必須的屬性:
// 屬性1 是 path, 表示監聽 哪個路由連結位址;
// 屬性2 是 component, 表示,如果 路由是前面比對到的 path ,則展示 component 屬性對應的那個元件
// 注意: component 的屬性值,必須是一個 元件的模闆對象, 不能是 元件的引用名稱;
// { path: '/', component: login },
{ path: '/', redirect: '/login' }, // 這裡的 redirect 和 Node 中的 redirect 完全是兩碼事
{ path: '/login', component: login },
{ path: '/register', component: register }
],
linkActiveClass: 'myactive'
})
// 建立 Vue 執行個體,得到 ViewModel
var vm = new Vue({
el: '#app',
data: {},
methods: {},
router: routerObj // 将路由規則對象,注冊到 vm 執行個體上,用來監聽 URL 位址的變化,然後展示對應的元件
});
</script>
</body>
</html>