1. 程式人生 > >vue router(路由)的最基礎使用

vue router(路由)的最基礎使用

--------------------- 
作者:甲殼蟲歐尼醬 
來源:CSDN 
原文:https://blog.csdn.net/qq_34131399/article/details/79404844 
版權宣告:本文為博主原創文章,轉載請附上博文連結!

 

 

我們這裡只是第一步使用router,最簡單的一步先踏出去,不涉及動態路由、巢狀路由的使用。    

    剛聽到路由的時候,只能大概知道可能這是與路徑和目標有關。

    正確的來說,在web開發中,路由是指根據url分配到對應的處理程式。在我看來路由就像是指路牌,在這個url中('http://blog.csdn.net/qq_34131399/article/details/79393260'),我們可以將‘/***’這樣的組合看成是我們站在一個有多個方向的路口,具體的如"/article"就是指我們去article的路牌。我們要到目的地要通過多個需要選擇的路口,我們走的這一路,將經過的路牌串起來,就是url了。所以為了讓我們的程式按照我們規劃的路線行進,我們就要用到路由。

    這裡的路由比起計算機其他方面的路由要簡單得多,就是起到對頁面組合替換進行源頭到目的地的引導作用,就像a標籤一樣,你點了我,我就帶你去指定的地方。

   vue中引用路由,我們要在建立專案時點選‘需要vue-router’,也可以後來再安裝‘vue-router’,使用npm install vue-router進行安裝。

    這裡說一下router的三個容易混淆的概念:

    首先先看一下官方給的程式碼:

// 0. 如果使用模組化機制程式設計,匯入Vue和VueRouter,要呼叫 Vue.use(VueRouter)
 
// 1. 定義(路由)元件。
// 可以從其他檔案 import 進來
const Foo = { template: '<div>foo</div>' }
const Bar = { template: '<div>bar</div>' }
 
// 2. 定義路由
// 每個路由應該對映一個元件。 其中"component" 可以是
// 通過 Vue.extend() 建立的元件構造器,
// 或者,只是一個元件配置物件。
// 我們晚點再討論巢狀路由。
const routes = [
  { path: '/foo', component: Foo },
  { path: '/bar', component: Bar }
]
 
// 3. 建立 router 例項,然後傳 `routes` 配置
// 你還可以傳別的配置引數, 不過先這麼簡單著吧。
const router = new VueRouter({
  routes // (縮寫)相當於 routes: routes
})
 
// 4. 建立和掛載根例項。
// 記得要通過 router 配置引數注入路由,
// 從而讓整個應用都有路由功能
const app = new Vue({
  router
}).$mount('#app')
 
// 現在,應用已經啟動了!
    上邊有三個長的很像的,分別是router、route、routes,初學很容易就會看混淆。

    route:上邊示例沒有給出但是它是routes的單數形式,就是代表一個指路牌,有一個名字和指向的元件,like this ->{path:'/***',component:***}。

    routes:它的後邊有個s,所以它就要高階一點,是route的複數形式,是一個route組成的陣列,包含一組route。

    router:router是一個VueRouter的物件,用來管理路由,所以它內部肯定會有routes屬性,還有其他的屬性和方法。

    當我們要使用時,我們只需要配好路由,把每一個需要的路由配置好,然後將路由掛載到根例項上全域性就都可以使用了。

    我用vue-cli建立的vue專案,裡邊就有個完整的vue並且帶上路由的結構。

箭頭所指就是路由管理的地方。我通常都是把所有的路由配到這裡,這樣統一管理也比較直觀。

寫了幾個簡單的,這裡的元件都是.vue檔案的元件。

import Vue from 'vue'
import Router from 'vue-router'
//引入.vue元件
import FindBack from '@/components/FindBack'
import AboutUs from '@/components/AboutUs'
import NearbyThing from '@/components/NearbyThing'
import FullForm from '@/components/FullForm'
 
 
 
 
Vue.use(Router)//宣告使用Router
 
export default new Router({
  routes: [
    {
      path: '/',
      redirect:'/a',//重定向
      name: 'FindBack',
      component: FindBack
    },
    {
      path: '/a',
      name: 'FindBack',
      component: FindBack
    },
    {
      path: '/c',
      name: 'AboutUs',
      component: AboutUs
    },
    {
      path: '/b',
      name: 'NearbyThing',
      component: NearbyThing
    }
  ]
})

因為在main.js檔案中已經引入,所以我們就可以直接全域性使用了。

使用有兩種方法一種是類似a標籤的使用,一種是用函式來使用。

1.標籤式使用方法

<router-view></router-view> //這裡先預留一個坑
 
<router-link to="/bar">Go to Bar</router-link>//當我們在頁面上點選‘Go to Bar’時就將指向的元件填到頁面上的坑裡
2.函式式(程式設計式)使用方法

// 字串 這裡的字串就是url的一個組成部分 比如'/****'
router.push('home')
 
// 物件
router.push({ path: 'home' })
 
// 命名的路由
router.push({ name: 'user', params: { userId: 123 }})
 
// 帶查詢引數,變成 /register?plan=private
router.push({ path: 'register', query: { plan: 'private' }})
我覺得對於初學者來說,先不考慮後邊三種使用方式。不過記得在使用時,我們要import你管理router的js檔案。

現在我們來串一串流程:

管理路由的js檔案

import Vue from 'vue'
import Router from 'vue-router'
 
import FindBack from '@/components/FindBack'//一下幾個import都是引入.vue的元件檔案
import AboutUs from '@/components/AboutUs'
import NearbyThing from '@/components/NearbyThing'
import FullForm from '@/components/FullForm'
 
Vue.use(Router)//向vue說明 我們要使用路由
 
export default new Router({
  routes: [
    {
      path: '/',
      redirect:'/a',//匹配到這個字串時我們重定向到'/a'這裡來,也就是重新指向一個路由
      name: 'FindBack',
      component: FindBack
    },
    {
      path: '/a',
      name: 'FindBack',
      component: FindBack
    },
    {
      path: '/c',
      name: 'AboutUs',
      component: AboutUs
    },
    {
      path: '/b',
      name: 'NearbyThing',
      component: NearbyThing
    }
  ]
})
使用路由頁面:

<template>
    <div id="app">
        <router-view v-on:nearbything_="changeBButtomStage"></router-view>
 
        <!-- 這裡帶引數呼叫函式 不同引數就匹配不同的路由 -->
        <button v-on:click='chooseMe(1)'>1</button>
        <button v-on:click='chooseMe(2)'>1</button>
        <button v-on:click='chooseMe(3)'>1</button>
    </div>
</template>
<script>
import router from "./router";//引入管理router的js檔案
export default {
    data() {
        return {}
    },
    methods: {
        // 根據選擇的按鈕進行頁面跳轉 或者 按鈕顏色變換
        chooseMe: function(i) {
            switch (i) {//判斷選擇哪一個路由 
                case 1:
                    router.push("/a");
                    break;
                case 2:
                    router.push("/b");
                    break;
                case 3:
                    router.push("/c");
                    break;
            }
        }
    }
</script>
另外還有其他的元件檔案,選擇不同路由就將不同的元件塞入預留的坑裡。