1. 程式人生 > >Vue+webpack構建單頁router應用(二)

Vue+webpack構建單頁router應用(二)

巢狀路由

其實很簡單,主要是vue2.0有一些變更。
所以要多看API文件,少看網上的教程 = =

配置路由

配置路由,這裡為Home配置了兩個子路由news和message

const routes = [{
    path: '/Hello',
    component: Hello
}, {
    path: '/Home',
    component: Home,
    children: [{
        path: 'news',
        component: News
    }, {
        path: 'message',
        component: Message
    }]
}, {
    path: '/About'
, component: About }];

路由的使用

寫在Home.vue中,其實跟app.vue一樣。

<template>
    <div>
    <div>
        <h1>Home</h1>
        <p>{{msg}}</p>
    </div>
    <div>
        <ul class="nav nav-tabs">
            <li>
                <router-link
to="/Home/news">
News</router-link> </li> <li> <router-link to="/Home/message">Message</router-link> </li> </ul> <router-view></router-view> </div> </div> </template
>

效果預覽

/home

這裡寫圖片描述

點選message後,顯示在home的router-view中

這裡寫圖片描述

命名路由

有時候覺得在

<router-link  to="/Home/news">News</router-link>

中寫一大堆的“/Home/news”這種長長的路由確實很麻煩,那麼解決方法來了
通過指定路由一個名字,比如這樣 name: ‘detail’
那麼訪問的時候就可以

```
<router-link  to="/Home/news/detail/">News</router-link>

的時候就可以寫成

<router-link  to="detail">News</router-link>

動態路由

所謂動態路由就是,在訪問某個頁面的時候後面帶引數
比如 這樣的一個訪問 http://localhost:8080/#/Home/news/detail/03
後面的03就是跟的引數。
我們希望可以在detail頁面可以獲取這個引數,vue-router給了我們一個很好的方法。
通過 $route.params.id 就可以獲取。

那麼這個id是怎麼傳過去的呢,看一下程式碼

<template>
<div>
    <ul>
        <li v-for="news in newsList">
            <router-link :to="{ name: 'detail', params: { id: news.id} }">{{news.title}}</router-link>
        </li>
    </ul>
    <div>
        <router-view></router-view>
    </div>
</div>
</template>

<script>    
    export default{
        data: function(){
            return {
                newsList: [
                    { id: '01', title: 'News 01'},
                    { id: '02', title: 'News 02'},
                    { id: '03', title: 'News 03'}
                ]
            }
        }
    }   
</script>

沒錯這裡,指定了路由路徑和引數params
之前寫的rooter-link 中的to是寫死的,所以不需要動態繫結,這裡的to前面寫了:to ,道理跟繫結value一樣

   <router-link :to="{ name: 'detail', params: { id: news.id} }">{{news.title}}</router-link>

另外看一下官方的說明

宣告式 程式設計式
router-link :to=”…” router.push(…)

to其實是router.push的語法糖

router.push提供了以下的方法:

// 字串
router.push('home')

// 物件
router.push({ path: 'home' })

// 命名的路由
router.push({ name: 'user', params: { userId: 123 }})

// 帶查詢引數,變成 /register?plan=private
router.push({ path: 'register', query: { plan: 'private' }})

好了,話不多說,看一下效果

這是newsDetail檔案

<template>
    <div>
        News Detail - {{$route.params.id}} ......
    </div>
</template>

執行效果
這裡寫圖片描述

成功顯示了我們傳入的引數。
這裡寫圖片描述

路由也可以配置查詢引數

<a v-link="{ name: 'detail' , params: {id: news.id } , query: {a: 'xyz'} }">{{ news.title }}</a>

我們在app.vue中寫了一個模組,用於顯示當前路徑,引數,路由名稱,查詢物件

 <div class="row">
      <div class="col-xs-offset-2 col-xs-8">
        <div class="well">
          <p>當前路徑:<code>{{$route.path}}</code></p>
          <p>當前引數:<code>{{$route.params | json}}</code></p>
          <p>路由名稱:<code>{{$route.name}}</code></p>
          <p>路由查詢引數:<code>{{$route.query | json}}</code></p>
        </div>
      </div>
    </div>

測試效果,是不是很棒!!

這裡寫圖片描述

至此,vue-router的基本功能就算學習完了。