Vue-router路由

Vue-router

前端路由和後端路由的概念

前端路由:對於單頁面應用程序來說,主要通過url中的hash(#號)來實現不同頁面之間的切換,同時,hash有一個特點:HTTP請求中不會包含hash相關的內容,所以單頁面程序中的頁面跳轉主要用hash實現。
後端路由:對於普通的網站,所以得超鏈接都是url地址,所有的url地址都對應服務器上對應的資源。

在vue中使用vue-router步驟

1、導入vue-router組件類庫
<script src="./lib/vue-router-3.0.1.js"></script>
2、創建一個路由對象,當導入vue-router包之後,在window全局對象中,就有了一個路由的構造函數,叫做VueRouter
routes:表示路由匹配規則,每個路由匹配規則都是一個對象,這個規則對象身上必須有兩個屬性。
屬性1是path,表示監聽哪個路由鏈接地址
屬性2是component,表示如果路由是前面匹配到的path,則展示component屬性對應的那個組件(注意:component的屬性值,必須是一個組件的模板對象,不能是組件的引用名稱)

var routerObj = new VueRouter({
    routes : [  
        {path: '/login', component: login},
        {path: '/register', component: register}
    ],
})

3、創建組件模板對象

var login = {
            template: '<h1>登錄組件</h1>'
        }

  var register = {
      template: '<h1>註冊組件</h1>'
  }

4、將路由規則對象,註冊到vm實例上,router指向routerObj,用來監聽url地址的變化,然後展示相應的組件

var vm = new Vue({
            el:'#app',
            data:{},
            methods:{},
            router: routerObj  //將路由規則對象,註冊到vm實例上,用來監聽url地址的變化,然後展示相應的組件
        });

5、使用router-view組件來顯示匹配到的組件,這是vue-router提供的元素,專門用來當做佔位符的,將來路由規則匹配到的組件,就會展示到這個router-view中去,所以可以認爲router-view是一個佔位符

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

6、使用router-link組件來導航
不使用router-link導航方式:

<a href="#/login">登錄</a>
<a href="#/register">註冊</a>

使用router-link導航方式,router-link默認渲染爲一個a標籤:

<router-link to="/login" tag="span">登錄</router-link>
<router-link to="/register">註冊</router-link>

7、當首次進入該頁面時,默認login頁面,使用redirect重定向修改根目錄的hash值

{path: '/', redirect: '/login'}, 

8、設置選中組件高亮的方式
方式1:

<style>
        .router-link-active, .myactive{
            color: red;
            font-weight: 800;
            font-style: italic;
            font-size: 80px;
            text-decoration: underline;
            background-color: green;
        }
</style>

方式2:通過路由構造選項linkActiveClass

linkActiveClass: 'myactive'

運行結果
在這裏插入圖片描述

在路由規則中定義參數

方式1:使用query方式傳遞參數。通過this.$route.query.id獲取url地址中的id

<body>
    <div id="app">
        <!-- 如果在路由中,使用查詢字符串,給路由傳遞參數,則不需要修改路由規則的path屬性 -->
        <router-link to="/login?id=10&name=zs">登錄</router-link>
        <router-link to="/register">註冊</router-link>

        <router-view></router-view>
    </div>
    <script>
        var login = {
            template: '<h1>登錄 --- {{ $route.query.id}} --- {{ $route.query.name }}</h1>',
            created(){ //組件的生命週期鉤子函數
                console.log(this.$route.query.id)
            }
        }
        var register = {
            template: '<h1>註冊</h1>'
        }

        var router = new VueRouter({
            routes: [
                {path: '/login', component: login},
                {path: '/register', component: register}
            ]
        })

        var vm = new Vue({
            el:'#app',
            data:{},
            methods:{},
            router
        });
    </script>
</body>

方式2:使用params方式傳遞參數。通過this.$route.params.id獲取url地址中的id
運行結果
在這裏插入圖片描述

路由嵌套

使用children屬性實現路由嵌套。
嵌套路由就是在一個路由頁面下繼續使用路由,也就是路由中的路由。
進出根目錄#/出現Account;
一級路由
進入路徑#/account出現<h1>文本和<a>登錄和註冊鏈接
在這裏插入圖片描述
進入路徑#/account/login,這是二級路由,account下的東西不變,點擊登錄出現<h3>的文本,這裏採用的是children屬性,實現子路由
二級路由

二級路由
注意:子路由的path前面,不要帶/,否則永遠以根路徑開始請求

<body>
    <div id="app">
        <router-link to="/account">Account</router-link>
        <router-view></router-view>
    </div>

    <template id="tmp1">
        <div>
            <h1>這是Account組件</h1>

            <router-link to="/account/login">登錄</router-link>
            <router-link to="/account/register">註冊</router-link>

            <router-view></router-view>
        </div>
    </template>
    <script>
        // 組件的模板對象
        var account = {
            template: '#tmp1'
        }

        var login = {
            template: '<h3>登錄</h3>'
        }

        var register = {
            template: '<h3>註冊</h3>'
        }

        var router = new VueRouter({
            routes: [
                {path: '/account', 
                component: account,
                // 使用children屬性,實現子路由,同時子路由的path前面,不要帶/,否則永遠以根路徑開始請求,這樣不方便用戶去理解url地址
                children:[
                    {path: 'login', component: login},
                    {path: 'register', component: register}
                ]},

                // {path: '/account/login', component: login},
                // {path: '/account/register', component: register}
            ]
        })

        var vm = new Vue({
            el:'#app',
            data:{},
            methods:{},
            router
        });
    </script>
</body>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章