1. 程式人生 > >vue入門總結(4)

vue入門總結(4)

1.路由的模式:

前文中我們建立VueRouter例項時用了mode:history的引數,這個值的意思是使用history模式,這種模式充分利用了history.pushState API來完成URL的跳轉而無須重新載入頁面。

如果不使用history模式,當訪問home的時候地址就會變為:

http://localhost/#home

反之為:http://localhost/home

2.路由與導航:

vue-router提供了兩個指令標籤元件這個導航與自動渲染邏輯:

<router-view>---渲染路徑匹配到的檢視元件,它還可以內嵌自己的<router-view>,根據巢狀路徑渲染巢狀元件。

<router-link>---實現具有路由功能的導航

接下來我們就在App.vue中用這兩個標籤改寫<template></template>的模板內容:

<template>

        <ul>

            <li>

                //使用router-link指向定義的path

                <router-link to="/home"><div>Home</div></router-link>

                <router-link to="/explorer"><div>Explorer</div></router-link>

                <router-link to="/cart"><div>Cart</div></router-link>

                <router-link to="/me"><div>Me</div></router-link>

            </li>

        </ul>

        <div>

                //用router-view渲染檢視

                <router-view></router-view>

        </div>

</template>

 

3.上面的做法有一個缺點,就是如果我把/home改成/homepage或者其他的時候需要在VueRouter全域性配置中更改,以及每一個用到過的地方進行更改,無論我們做的是服務端的開發還是前端開發,路由的使用都有一個明確的原則:不直接引用路由定義。

vue-router提供了一種隱式的路由引用方式,vue-router將之稱為“命名路由”

我們需要在VueRouter的配置上做一些重構:

route.js中的更改

const router = new VueRouter({

    mode:'history',

    base:__dirname,

    router:[

        //將頁面元件與path指定的路由關聯

        {name:'Home',path:'/home',component:Home},

        {name:'Explorer',path:'/explorer',component:Explorer},

         {name:'Cart',path:'/cart',component:Cart},

          {name:'Me',path:'/me,component:Me}

    ]

});

App.vue

<template>中的更改

        <ul>

            <li>

                //使用router-link指向定義的path

                <router-link to="{name:'Home'}"><div>Home</div></router-link>

                <router-link to="{name:'Explorer'}"><div>Explorer</div></router-link>

                <router-link to="{name:'Cart'}"><div>Cart</div></router-link>

                 <router-link to="{name:'Me'}"><div>Me</div></router-link>

            </li>

        </ul>

        <div>

                //用router-view渲染檢視

                <router-view></router-view>

        </div>

</template>

 

4.動態路由

可以理解為帶引數的路由

比如在route.js中,路由/home要傳遞一個id引數

const router = new VueRouter({

    mode:'history',

    base:__dirname,

    router:[

        //將頁面元件與path指定的路由關聯

        {name:'Home',path:'/home/:id',component:Home},

        {name:'Explorer',path:'/explorer',component:Explorer},

         {name:'Cart',path:'/cart',component:Cart},

          {name:'Me',path:'/me,component:Me}

    ]

});

App.vue

<template>中的更改

        <ul>

            <li>

                //使用router-link指向定義的path

                <router-link to="{name:'Home',params:{id:1}}"><div>Home</div></router-link>

                <router-link to="{name:'Explorer'}"><div>Explorer</div></router-link>

                <router-link to="{name:'Cart'}"><div>Cart</div></router-link>

                 <router-link to="{name:'Me'}"><div>Me</div></router-link>

            </li>

        </ul>

        <div>

                //用router-view渲染檢視

                <router-view></router-view>

        </div>

</template>

 

5.那在/home中又如何讀取id屬性呢?

export default {

    create(){

        const bookID = this.$route.params.id.

    }

}

 

6.當使用路由引數時,例如從 /home/1導航 /home/2原來的元件例項會被複用。這也意味著元件的生命週期鉤子不會再被1呼叫,可以通過在watch物件內新增對$route物件變化的追蹤函式:

export default {

    create(){

        const bookID = this.$route.params.id.

    },

    watch:{

           '$route'(to,from){

                //對路由變化做出響應

            }

    }

}