天天看點

Vue學習記錄-路由

什麼是路由

  1. **後端路由:**對于普通的網站,所有的超連結都是URL位址,所有的URL位址都對應伺服器上對應的資源;
  2. **前端路由:**對于單頁面應用程式來說,主要通過URL中的hash(#号)來實作不同頁面之間的切換,同時,hash有一個特點:HTTP請求中不會包含hash相關的内容;是以,單頁面程式中的頁面跳轉主要用hash實作;
  3. 在單頁面應用程式中,這種通過hash改變來切換頁面的方式,稱作前端路由(差別于後端路由);

在 vue 中使用 vue-router

  1. 導入 vue-router 元件類庫:
<!-- 1. 導入 vue-router 元件類庫 -->
  <script src="./lib/vue-router-2.7.0.js"></script>      
  1. 使用 router-link 元件來導航
<!-- 2. 使用 router-link 元件來導航 -->
<router-link to="/login">登入</router-link>
<router-link to="/register">注冊</router-link>      
  1. 使用 router-view 元件來顯示比對到的元件
<!-- 3. 使用 router-view 元件來顯示比對到的元件 -->
<router-view></router-view>      
  1. 建立使用​

    ​Vue.extend​

    ​建立元件
// 4.1 使用 Vue.extend 來建立登入元件
    var login = Vue.extend({
      template: '<h1>登入元件</h1>'
    });

    // 4.2 使用 Vue.extend 來建立注冊元件
    var register = Vue.extend({
      template: '<h1>注冊元件</h1>'
    });      
  1. 建立一個路由 router 執行個體,通過 routers 屬性來定義路由比對規則
// 5. 建立一個路由 router 執行個體,通過 routers 屬性來定義路由比對規則
    var router = new VueRouter({
      routes: [
        { path: '/login', component: login },
        { path: '/register', component: register }
      ]
    });      
  1. 使用 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>