2020-05-07--Vue路由2--Vue Router簡(jiǎn)介,使用以及嵌套路由背传,動(dòng)態(tài)路由

Vue Router簡(jiǎn)介

  • 它是一個(gè)Vue.js官方提供的路由管理器。是一個(gè)功能更加強(qiáng)大的前端路由器谷婆,推薦使用慨蛙。
  • Vue Router和Vue.js的核心深度集成,因此非常契合纪挎,可以一起方便的實(shí)現(xiàn)SPA單頁(yè)應(yīng)用程序的開(kāi)發(fā)期贫。
  • Vue Router依賴(lài)于Vue,所以需要先引入Vue异袄,再引入Vue Router

Vue Router的特性:

  • 支持H5歷史模式或者h(yuǎn)ash模式
  • 支持嵌套路由
  • 支持路由參數(shù)
  • 支持編程式路由
  • 支持命名路由
  • 支持路由導(dǎo)航守衛(wèi)
  • 支持路由過(guò)渡動(dòng)畫(huà)特效
  • 支持路由懶加載
  • 支持路由滾動(dòng)行為

Vue Router的使用步驟(★★★)

    <script src="./js/vue.js"></script>
    <script src="./js/vue-router_3.0.2.js"></script>

在html中

  • A.導(dǎo)入js文件和為全局window對(duì)象掛載VueRouter構(gòu)造函數(shù)
    <script src="./js/vue.js"></script>
    <script src="./js/vue-router_3.0.2.js"></script>
  • B.添加路由鏈接 <router-link>是vue中提供的標(biāo)簽通砍,默認(rèn)會(huì)被渲染為a標(biāo)簽, to屬性默認(rèn)被渲染為href屬性隙轻, to屬性的值會(huì)被渲染為#開(kāi)頭的hash地址
<a href='#user'>user</a>

<router-link to="/user">User</router-link> //與a標(biāo)簽等效
<router-link to="/login">Login</router-link> 

對(duì)應(yīng)關(guān)系:


  • C.添加路由填充位(路由占位符) 最后路由展示的組件就會(huì)在占位符的位置顯示
<component></component>

<router-view></router-view>   //與上邊等效

在js中:

  • D.定義路由組件
#定義組件
var User = { 
        template:"<div>This is User</div>" 
         } 
var Login = { 
        template:"<div>This is Login</div>" 
        } 
  • E.配置路由規(guī)則并創(chuàng)建路由實(shí)例,類(lèi)似于Vue實(shí)例
var myRouter = new VueRouter({
    //routes是路由規(guī)則數(shù)組
    routes:[
        //每一個(gè)路由規(guī)則都是一個(gè)對(duì)象埠帕,對(duì)象中至少包含path和component兩個(gè)屬性
        //path表示  路由匹配的hash地址,component表示路由規(guī)則對(duì)應(yīng)要展示的組件對(duì)象
        {path:"/user",component:User},
        {path:"/login",component:Login}
    ]
})
  • F.將路由掛載到Vue實(shí)例中
var vm = new Vue({
            el:'#app',
            //通過(guò)router屬性?huà)燧d路由對(duì)象
            router:myRouter
        })

補(bǔ)充:
路由重定向:可以通過(guò)路由重定向?yàn)轫?yè)面設(shè)置默認(rèn)展示的組件 在路由規(guī)則中添加一條路由規(guī)則即可玖绿,如下:

var myRouter = new VueRouter({
    //routes是路由規(guī)則數(shù)組
    routes: [
        //path設(shè)置為/表示頁(yè)面最初始的地址 / ,redirect表示要被重定向的新地址敛瓷,設(shè)置為一個(gè)路由即可
        { path:"/", redirect:"/user"},             
        { path: "/user", component: User },
        { path: "/login", component: Login }
    ]
})

那么一個(gè)用VueRouter的搭建的小案例實(shí)現(xiàn)了
運(yùn)行:
默認(rèn)顯示頁(yè)面:



點(diǎn)擊login:


嵌套路由的概念

當(dāng)我們進(jìn)行路由的時(shí)候顯示的組件中還有新的子級(jí)路由鏈接以及內(nèi)容。

嵌套路由最關(guān)鍵的代碼在于理解子級(jí)路由的概念: 比如我們有一個(gè)/login的路由 那么/login下面還可以添加子級(jí)路由斑匪,如:

  • /login/account
  • /login/phone
<body>
    <div id="app">
        <!-- 路由鏈接 -->
        <router-link to="/user">User</router-link> 
        <router-link to="/login">Login</router-link>
         <!--占位符  -->
        <router-view></router-view>   
    </div>

    <!-- login的模板 -->
    <template id="login">
        <div>
            <h1>This is Login</h1>
            <hr>
            <router-link to="/login/account">賬號(hào)密碼登錄</router-link>
            <router-link to="/login/phone">掃碼登錄</router-link>
            <router-view></router-view>
        </div>
    </template>
    <script>
        //定義組件
        var User = { 
            template:"<div>This is User</div>" 
         } 
        var Login = { 
            template:'#login' 
        } 
        //定義login子路由的組件
        var account = {template: "<div>賬號(hào):<input><br>密碼:<input></div>"};
        var phone = {template: "<h1>掃我二維碼</h1>"};

        //路由實(shí)例
        var myRouter = new VueRouter({
            //routes是路由規(guī)則數(shù)組
            routes:[
                { path:"/", redirect:"/user"},  
                {path:"/user",component:User},
                {
                    path:"/login",
                    component:Login,
                    //定義子路由
                    children: [
                        {path: "/login/account", component: account},
                        {path: "/login/phone", component: phone},
                    ]
                }
            ]
        })
        var vm = new Vue({
            el:'#app',
            //通過(guò)router屬性?huà)燧d路由對(duì)象
            router:myRouter
        })
    </script>
</body>

思路:首先用戶(hù)點(diǎn)擊Login時(shí)呐籽,通過(guò)to屬性的值到路由實(shí)例中的定義路由規(guī)則匹配



找到之后通過(guò)component顯示相應(yīng)的組件模板,填充占位符蚀瘸。



結(jié)果顯示:

在該模板中又定義了兩個(gè)路由和一個(gè)占位符狡蝶,當(dāng)用戶(hù)點(diǎn)擊某個(gè)路由后,再次通過(guò)該路由的to屬性到路由規(guī)則數(shù)組中匹配贮勃,(因?yàn)槭亲勇酚商叭牵灾苯釉诟嘎酚傻腸hildren中尋找匹配)



找到后,顯示組件模板寂嘉。填充到占位符中奏瞬。

動(dòng)態(tài)路由

動(dòng)態(tài)路由就是路由鏈接的to屬性的值是動(dòng)態(tài)變化的,
在路由實(shí)例的規(guī)則數(shù)組中進(jìn)行統(tǒng)一獲取,并可以對(duì)該值進(jìn)行操作或顯示到該路由指向的組件模板中泉孩。

<!-- 動(dòng)態(tài)路由 -->
<body>
    <div id="app">
        <!-- 路由鏈接 -->
        <router-link to="/user/22">User</router-link> 
        <router-link to="/login">Login</router-link>
         <!--占位符  -->
        <router-view></router-view>   
    </div>
    <script>
        //定義組件
        var User = { 
            template:"<div>User is {{ $route.params.id }}</div>" 
         } 
        var Login = { 
            template:"<div>This is Login</div>" 
        } 

        //路由實(shí)例
        var myRouter = new VueRouter({
            //routes是路由規(guī)則數(shù)組
            routes:[
                //path設(shè)置為/表示頁(yè)面最初始的地址 / ,redirect表示要被重定向的新地址硼端,設(shè)置為一個(gè)路由即可
                { path:"/", redirect:"/user"},  
                  
                //每一個(gè)路由規(guī)則都是一個(gè)對(duì)象,對(duì)象中至少包含path和component兩個(gè)屬性
                //path表示  路由匹配的hash地址寓搬,component表示路由規(guī)則對(duì)應(yīng)要展示的組件對(duì)象
                {path:"/user/:id",component:User},
                {path:"/login",component:Login}
            ]
        })
        var vm = new Vue({
            el:'#app',
            //通過(guò)router屬性?huà)燧d路由對(duì)象
            router:myRouter
        })
    </script>
</body>

解析:
User的路由鏈接to屬性的值為:



怎么獲取這個(gè)值呢珍昨?,到路由規(guī)則數(shù)組中進(jìn)行匹配:



我們發(fā)現(xiàn)修改他的path值為
'/user/:id'

即可獲取id(id為隨便取的名字,可以為pid镣典,bid等)
怎么在其指向的組件模板中顯示該獲取的id值兔毙?



在模板中通過(guò)插值的方式----{{$router.params.id}}進(jìn)行獲取。

{{$router.params.id}}

運(yùn)行:
點(diǎn)擊User后骆撇,顯示id值



可以在路由對(duì)應(yīng)的組件中使用$route.params.id來(lái)獲取路徑傳參的id參數(shù)值瞒御,但是這種方式不夠靈活。今后可以盡量使用props將組件和路由解耦神郊。

1.通過(guò)props來(lái)接收參數(shù)

html中的路由鏈接不變肴裙,改變路由規(guī)則數(shù)組和定義組件

//定義組件
 var User = { 
            props: ['id'],  //使用props接收id參數(shù)
            template:"<div>User is {{ id }}</div>" 
        } 

        //路由實(shí)例
        var myRouter = new VueRouter({
            routes:[
                //通過(guò)/:參數(shù)名  的形式傳遞參數(shù)

                // {path:"/user/:id",component:User},

                //如果props設(shè)置為true,route.params將會(huì)被設(shè)置為組件屬性
                {path:"/user/:id",component:User,props: true},
            ]
        })

運(yùn)行:


2.還有一種情況涌乳,我們可以將props設(shè)置為對(duì)象蜻懦,直接將靜態(tài)數(shù)據(jù)傳遞給組件進(jìn)行使用。 但是這樣id的值就訪(fǎng)問(wèn)不到了夕晓。
var User = { 
    props:["username","pwd"],
    template:"<div>用戶(hù):{{username}}---{{pwd}}</div>"
    }

var myRouter = new VueRouter({
    //routes是路由規(guī)則數(shù)組
    routes: [
        //通過(guò) /:參數(shù)名  的形式傳遞參數(shù) 
        //如果props設(shè)置為對(duì)象宛乃,則傳遞的是對(duì)象中的數(shù)據(jù)給組件
        { path: "/user/:id", component: User, props:{username:"jack",pwd:123} },

    ]
})

可以訪(fǎng)問(wèn)到props的數(shù)據(jù),但是path中的id訪(fǎng)問(wèn)不到蒸辆。

3.如果既想要獲取路由傳遞的參數(shù)值征炼,又想獲取傳遞的對(duì)象數(shù)據(jù),那么props應(yīng)該設(shè)置為函數(shù)形式躬贡。
var User = { 
            props: ['id','username','password'],  //使用props接收id參數(shù)
            template:"<div>User is--{{username}}---{{password}}---{{ id }}</div>" 
        } 
 //路由實(shí)例
        var myRouter = new VueRouter({
            routes:[
                //如果props設(shè)置為函數(shù)谆奥,則通過(guò)函數(shù)的第一個(gè)參數(shù)獲取路由對(duì)象
                //并可以通過(guò)路由對(duì)象的params屬性獲取傳遞的參數(shù)
                {path:"/user/:id",component:User,props:function(route){
                    return {    username:'lizhao',
                                password:'123456',
                                id:route.params.id
                            }
                    }
                },
            ]
        })

運(yùn)行:


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過(guò)簡(jiǎn)信或評(píng)論聯(lián)系作者拂玻。
  • 序言:七十年代末酸些,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子檐蚜,更是在濱河造成了極大的恐慌魄懂,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,294評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件闯第,死亡現(xiàn)場(chǎng)離奇詭異市栗,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)咳短,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,493評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)肃廓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人诲泌,你說(shuō)我怎么就攤上這事∠撑簦” “怎么了敷扫?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,790評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我葵第,道長(zhǎng)绘迁,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,595評(píng)論 1 284
  • 正文 為了忘掉前任卒密,我火速辦了婚禮缀台,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘哮奇。我一直安慰自己膛腐,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,718評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布鼎俘。 她就那樣靜靜地躺著哲身,像睡著了一般。 火紅的嫁衣襯著肌膚如雪贸伐。 梳的紋絲不亂的頭發(fā)上勘天,一...
    開(kāi)封第一講書(shū)人閱讀 49,906評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音捉邢,去河邊找鬼脯丝。 笑死,一個(gè)胖子當(dāng)著我的面吹牛伏伐,可吹牛的內(nèi)容都是我干的宠进。 我是一名探鬼主播,決...
    沈念sama閱讀 39,053評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼秘案,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼砰苍!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起阱高,我...
    開(kāi)封第一講書(shū)人閱讀 37,797評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤赚导,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后赤惊,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體吼旧,經(jīng)...
    沈念sama閱讀 44,250評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,570評(píng)論 2 327
  • 正文 我和宋清朗相戀三年未舟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了圈暗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,711評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡裕膀,死狀恐怖员串,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情昼扛,我是刑警寧澤寸齐,帶...
    沈念sama閱讀 34,388評(píng)論 4 332
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響渺鹦,放射性物質(zhì)發(fā)生泄漏扰法。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,018評(píng)論 3 316
  • 文/蒙蒙 一毅厚、第九天 我趴在偏房一處隱蔽的房頂上張望塞颁。 院中可真熱鬧,春花似錦吸耿、人聲如沸窜护。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,796評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)集漾。三九已至,卻和暖如春板乙,著一層夾襖步出監(jiān)牢的瞬間是偷,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,023評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工募逞, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蛋铆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,461評(píng)論 2 360
  • 正文 我出身青樓放接,卻偏偏與公主長(zhǎng)得像刺啦,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子纠脾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,595評(píng)論 2 350