vue.js路由vue-router(一)——簡(jiǎn)單路由基礎(chǔ)

前言

vue.js除了擁有組件開(kāi)發(fā)體系之外,還有自己的路由vue-router。在沒(méi)有使用路由之前,我們頁(yè)面的跳轉(zhuǎn)要么是后臺(tái)進(jìn)行管控,要么是用a標(biāo)簽寫(xiě)鏈接。使用vue-router后,我們可以自己定義組件路由之間的跳轉(zhuǎn),還可以設(shè)置稍復(fù)雜的嵌套路由,創(chuàng)建真正的spa(單頁(yè)面應(yīng)用)。我之前用vue-cli腳手架寫(xiě)了一個(gè)簡(jiǎn)單的人員管理實(shí)例,現(xiàn)在我們不用腳手架,就用原生的vue來(lái)寫(xiě),本文也主要是通過(guò)實(shí)例來(lái)講解vue.js+vue-router相關(guān)知識(shí)。

簡(jiǎn)單路由跳轉(zhuǎn)實(shí)例

1.起步

下載vue-router.js,新建項(xiàng)目文件夾命名為router,將下載的vue-router.js放在router/js/路徑下。新建index.html作為主頁(yè),引入樣式文件,引入兩個(gè)關(guān)鍵的js,vue和vue-router,再在body標(biāo)簽底部引入一個(gè)main.js用來(lái)寫(xiě)vue實(shí)例及配置路由,注意引用順序。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首頁(yè)</title>
    <link rel="stylesheet" href="css/main.css">
    <script src="js/vue.js"></script>
    <script src="js/vue-router.js"></script>
</head>
<body>
     <div id="app"></div>
     <template></template> //組件區(qū)域
     <script src="js/main.js"></script>
</body>
</html>

2.定義路由視圖

調(diào)用foot-nav組件,將底部導(dǎo)航組件引入在這里,是因?yàn)閮蓚€(gè)路由頁(yè)面都要用到它

<div id="app">
    <router-view></router-view>
    <foot-nav></foot-nav>
</div>

知識(shí)點(diǎn)::<router-view>

<router-view>標(biāo)簽相當(dāng)于一個(gè)插槽,用于將匹配到的組件渲染出來(lái),一個(gè)個(gè)路由定義的組件相當(dāng)于卡,跳轉(zhuǎn)某個(gè)路由時(shí),該路由下的頁(yè)面就插在這個(gè)插槽中渲染顯示。
一個(gè)組件可以有多個(gè)<router-view>視圖,并用name值去區(qū)分它們,這種多用在網(wǎng)頁(yè)布局方面,如上左主結(jié)構(gòu),這個(gè)時(shí)候就可以定義三個(gè)<router-view>
示例

<div id="app">
    <router-view name="top"></router-view>
    <router-view name="left"></router-view>
    <router-view name="main"></router-view>
</div>

<script>
    var topCom = Vue.extend({
        template: '<div>頂部</div>'
    })

    var leftCom = Vue.extend({
        template: '<div>側(cè)邊欄</div>'
    })

    var mainCom = Vue.extend({
        template: '<div>主頁(yè)</div>'
    })

    var router = new VueRouter({
        routes:[
            {
                path: '/',
                name: 'home',
                components:{
                    top: topCom,
                    left: leftCom,
                    main: mainCom
                }
            }
        ]
    })

    var app = new Vue({
        el: '#app',
        router
    })
</script>

再為各個(gè)板塊設(shè)置一下樣式,打開(kāi)瀏覽器查看效果

3.子組件(底部導(dǎo)航)

3.1 創(chuàng)建子組件

人員管理系統(tǒng)分為兩個(gè)模塊,一個(gè)首頁(yè),一個(gè)管理頁(yè),兩個(gè)頁(yè)面都需引入一個(gè)公共組件:底部導(dǎo)航。在首頁(yè)index.html中加入以下模板

<template id="footer">
    <div class="footer fixed">
        <ul>
            <li><router-link to="/">首頁(yè)</router-link></li>
            <li><router-link :to="{name:'manage',params:{id:1}}">人員管理</router-link></li>
        </ul>
    </div>
</template>

知識(shí)點(diǎn)::<router-link>

<router-link>標(biāo)簽主要實(shí)現(xiàn)跳轉(zhuǎn)鏈接功能,屬性to='/'即是跳轉(zhuǎn)到path為'/'的路徑(我們等會(huì)得配置路徑為'/'和'/manage'的路由)
router-link除了可以跳轉(zhuǎn)鏈接之外,還可以傳參,可以傳多個(gè)參數(shù),一般格式為

<router-link to="路由路徑"></router-link>
<router-link :to="{ path:路由路徑}"></router-link>
<router-link :to="{name:'路由命名',params:{參數(shù)名:參數(shù)值,參數(shù)名:參數(shù)值}}"></router-link>

知識(shí)點(diǎn):this.$router.push

如果不想用<router-link>標(biāo)簽,也可以給需要跳轉(zhuǎn)的地方添加一個(gè)點(diǎn)擊事件,在事件里寫(xiě)this.$router.push方法

this.$router.push('路由路徑')
this.$router.push({name:'路由命名',params:{參數(shù)名:參數(shù)值,參數(shù)名:參數(shù)值}})

3.2 注冊(cè)子組件

在main.js中全局注冊(cè)子組件并且定義vue實(shí)例

Vue.component('foot-nav',{
    template: '#footer'
})

var app = new Vue({
    el: '#app'
})

4.首頁(yè)及管理頁(yè)組件

4.1 創(chuàng)建首頁(yè)及管理頁(yè)

<template id="index">
    <div>
        首頁(yè)
    </div>
</template>
<template id="manage">
    <div>
        人員管理
        <p>id:{{id}}</p>
    </div>
</template>

4.2 注冊(cè)主頁(yè)及管理頁(yè)

var Home = Vue.extend({
    template: '#index'
})

var Manage = Vue.extend({
    template: '#manage',
    data(){
        return{
            id: ''
        }
    },
    mounted:function(){
        this.id = this.$route.params.id
    }
})

知識(shí)點(diǎn):this.$route.params

this.$route指向vue實(shí)例的路由對(duì)象,params是路由傳過(guò)來(lái)的參數(shù)集合

5.定義路由

定義路由router,并引進(jìn)vue實(shí)例中

var router = new VueRouter({
    routes:[
        {
            path:'/',
            name: 'home',
            component:Home
        },
        {
            path:'/manage/:id',
            name: 'manage',
            component:Manage
        }
    ]
})

var app = new Vue({
    el: '#app',
    router
})

知識(shí)點(diǎn):path:'/路徑/:參數(shù)名'

一個(gè)路由要傳參時(shí),需在path路徑后面添加一個(gè)‘/’并加上冒號(hào)和參數(shù)名

知識(shí)點(diǎn):路由激活class

vue-router當(dāng)路由處于激活狀態(tài)時(shí),會(huì)有一個(gè)class類“router-link-active”,我們只需為這個(gè)類添加樣式就可以實(shí)現(xiàn)路由激活狀態(tài)下的樣式編寫(xiě)
接下來(lái)去瀏覽器查看路由跳轉(zhuǎn)效果


6.嵌套路由

有時(shí)我們項(xiàng)目由多層嵌套組件組成,這個(gè)時(shí)候就需要用到嵌套路由
先看下圖例子,我們給manage路由再添加兩個(gè)子路由


6.1 在組件內(nèi)部添加<router-view>

<template id="manage">
    <div>
        人員管理
        <ul>
            <li><router-link to="/manage/list">人員列表</router-link></li>
            <li><router-link to="/manage/edit">編輯</router-link></li>
        </ul>
        <router-view></router-view>
    </div>
</template>

6.2 定義子路由

//構(gòu)建組件
var List = Vue.extend({
    template: '<div>人員列表</div>'
})

var Edit = Vue.extend({
    template: '<div>編輯</div>'
})



var router = new VueRouter({
    routes:[
        {
            path:'/',
            name: 'home',
            component:Home
        },
        {
            path:'/manage',
            name: 'manage',
            component:Manage,
        //子路由由children表示
            children:[
                {
                    path:'list',
                    name: 'list',
                    component:List
                },
                {
                    path:'edit',
                    name: 'edit',
                    component:Edit
                }
            ]
        }
    ]
})

7.路由重定向

未設(shè)置路由重定向時(shí),當(dāng)我們隨意輸入一個(gè)路徑,會(huì)顯示一片空白或404。為了防止這種現(xiàn)象發(fā)生,我們一般在配置路由時(shí)再定義一個(gè)重定向路由

var router = new VueRouter({
    routes:[
        {
            path:'/',
            name: 'home',
            component:Home
        },
        {
            path:'*',
            redirect: '/'
        },
    ]
})

打開(kāi)瀏覽器,隨意輸入一個(gè)未定義的路由查看效果


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容