vue-路由

路由是什么

路由装诡,其實(shí)就是指向银受,當(dāng)我點(diǎn)擊home導(dǎo)航按鈕,頁(yè)面顯示home的內(nèi)容鸦采,如果點(diǎn)擊的是about宾巍,就切換成about的內(nèi)容。

安裝

1、直接引入包
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
2、npm下載

如果在一個(gè)模塊化工程中使用它徐伐,必須要通過(guò) Vue.use()明確的安裝路由功能:在你的項(xiàng)目的src文件夾下的main.js文件內(nèi)寫(xiě)入:

import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)

具體用法

1得湘、基本路由
<div id="app">
    <div>
        <router-link to="/home">主頁(yè)</router-link>   // 默認(rèn)會(huì)被渲染成一個(gè)a標(biāo)簽选浑,to屬性為我們定義的路由
        <router-link to="/user" tag='li'>用戶(hù)頁(yè)</router-link>   // 如果不想渲染成a蓝厌,可以在tag選項(xiàng)寫(xiě)其他標(biāo)簽
    </div>
    <div>
        <router-view></router-view>
    </div>
</div>
<script>
    var Home = {   // 定義組件
        template: '<p>我是主頁(yè)的內(nèi)容~</p>'
    }
    var User = {
        template: '<p>我是用戶(hù)的內(nèi)容~</p>'
    }
    const router = new VueRouter({   // 定義路由并配置路由
        routes: [
            {
              path: '*',   // 沒(méi)有點(diǎn)擊按鈕或者填寫(xiě)路徑錯(cuò)誤默認(rèn)跳轉(zhuǎn)到 /home
              redirect: '/home'   // 這里就是路由的重定向
             },
            {
                path: '/home',   // 路徑
                component: Home   // 組件
            },
            {
                path: '/user',
                component: User
            }
        ]
    })
    var vm = new Vue({
        el: '#app',
        router   // 注入路由
    })
</script>

效果:



點(diǎn)擊主頁(yè)按鈕會(huì)顯示主頁(yè)的內(nèi)容,點(diǎn)擊用戶(hù)按鈕會(huì)顯示用戶(hù)的內(nèi)容古徒。

2拓提、動(dòng)態(tài)路由

上面我們定義的路由,都是嚴(yán)格匹配的隧膘,只有router-link 中的to屬性和 js 中一條路由route中 path 一模一樣代态,才能顯示相應(yīng)的組件. 但有時(shí)現(xiàn)實(shí)卻不是這樣的,當(dāng)我們?nèi)ピL(fǎng)問(wèn)網(wǎng)站并登錄成功后疹吃,它會(huì)顯示 歡迎你蹦疑,+ 你的名字。不同的用戶(hù)登錄萨驶, 只是顯示“你的名字” 部分不同必尼,其它部分是一樣的。這就表示篡撵,它是一個(gè)組件,假設(shè)是user組件豆挽。不同的用戶(hù)(就是用戶(hù)的id不同)育谬,它都會(huì)導(dǎo)航到同一個(gè)user 組件中。這樣我們?cè)谂渲寐酚傻臅r(shí)候帮哈,就不能寫(xiě)死, 就是路由中的path屬性膛檀,不能寫(xiě)死,那要怎么設(shè)置? 導(dǎo)航到 user 組件娘侍,路徑中肯定有user, id 不同咖刃,那就給路徑一個(gè)動(dòng)態(tài)部分來(lái)匹配不同的id. 在vue-router中,動(dòng)態(tài)部分 以 : 開(kāi)頭憾筏,那么路徑就變成了 /user/:id, 這條路由就可以這么寫(xiě): { path:"/user/:id", component: user }

<div id="app">
    <div>
        <router-link to="/home">主頁(yè)</router-link>
        <router-link to="/user/123">用戶(hù)123</router-link>
        <router-link to="/user/456">用戶(hù)456</router-link>
    </div>
    <div>
        <router-view></router-view>
    </div>
</div>
<script>
    var Home = {
        template: '<p>我是主頁(yè)的內(nèi)容~</p>'
    }
    var User = {
        template: '<p>我是用戶(hù)的內(nèi)容~</p>'
    }
    const router = new VueRouter({
        routes: [
            {
                path: '/home',
                component: Home
            },
            {
                path: '/user/:id',
                component: User
            }
        ]
    })
    var vm = new Vue({
        el: '#app',
        router
    })
</script>

這時(shí)在頁(yè)面中點(diǎn)擊user123 和user456, 可以看到它們都導(dǎo)航到user組件嚎杨,配置正確。

3氧腰、嵌套路由

嵌套路由枫浙,主要是由我們的頁(yè)面結(jié)構(gòu)所決定的。當(dāng)我們進(jìn)入到user頁(yè)面的時(shí)候古拴,它下面還有分類(lèi)箩帚,登陸頁(yè)面,注冊(cè)頁(yè)面黄痪,這時(shí)紧帕,用法如下:

<div id="app">
    <div>
        <router-link to="/home">主頁(yè)</router-link>
        <router-link to="/user">用戶(hù)</router-link>
    </div>
    <div>
        <router-view></router-view>
    </div>
</div>
<script type="text/x-template" id="user">
    <div>
        <div>
            <router-link to="/user/login">登陸</router-link>
            <router-link to="/user/reg">注冊(cè)</router-link>
        </div>
        <div>
            <router-view></router-view>
        </div>
    </div>
</script>
<script>
    var Home = {
        template: '<p>我是主頁(yè)的內(nèi)容~</p>'
    }
    var User = {
        template: '#user'
    }
    var Login = {
        template: '<p>我是登陸頁(yè)的內(nèi)容~</p>'
    }
    var Reg = {
        template: '<p>我是注冊(cè)頁(yè)的內(nèi)容~</p>'
    }
    const router = new VueRouter({
        routes: [
            {
                path: '/home',
                component: Home
            },
            {
                path: '/user',
                component: User,
                children: [   // 書(shū)寫(xiě)子路由
                    {
                        path: 'login',
                        component: Login
                    },
                    {
                        path: 'reg',
                        component: Reg
                    }
                ]
            }
        ]
    })
    var vm = new Vue({
        el: '#app',
        router
    })
</script>

效果:


4、命名路由

有時(shí)我們通過(guò)一個(gè)名稱(chēng)來(lái)標(biāo)識(shí)一個(gè)路由顯得更方便一些桅打,特別是在鏈接一個(gè)路由是嗜,或者是執(zhí)行一些跳轉(zhuǎn)的時(shí)候愈案。你可以在創(chuàng)建 Router 實(shí)例的時(shí)候,在 routes 配置中給某個(gè)路由設(shè)置名稱(chēng)叠纷。

<div id="app">
    <div>
        <router-link :to="{name: 'home'}">主頁(yè)</router-link>
        <router-link :to="{name: 'user'}">用戶(hù)頁(yè)</router-link>
    </div>
    <div>
        <router-view></router-view>
    </div>
</div>
<script>
    var Home = {
        template: '<p>我是主頁(yè)的內(nèi)容~</p>'
    }
    var User = {
        template: '<p>我是用戶(hù)的內(nèi)容~</p>'
    }
    const router = new VueRouter({
        routes: [
            {
                path: '*',
                redirect: '/home'
            },
            {
                path: '/home',
                name: 'home',
                component: Home
            },
            {
                path: '/user',
                name: 'user',
                component: User
            }
        ]
    })
    var vm = new Vue({
        el: '#app',
        router  
    })
</script>
5刻帚、路由傳參

5.1、query

<div id="app">
    <div>
        <router-link to="/home?name=tom&age=24">主頁(yè)</router-link>   // 參數(shù)在這里書(shū)寫(xiě)
        <router-link to="/user">用戶(hù)頁(yè)</router-link>
    </div>
    <div>
        <router-view></router-view>
    </div>
</div>
<script>
    var Home = {
        template: '<p>我是主頁(yè)的內(nèi)容~---{{$route.query}}</p>'   // 通過(guò) $route.query 獲取
    }
    var User = {
        template: '<p>我是用戶(hù)的內(nèi)容~</p>'
    }
    const router = new VueRouter({
        routes: [
            {
                path: '/home',
                component: Home
            },
            {
                path: '/user',
                component: User
            }
        ]
    })
    var vm = new Vue({
        el: '#app',
        router
    })
</script>

5.2涩嚣、 params

<div id="app">
    <div>
        <router-link to="/home/jack/25/sing">主頁(yè)</router-link>   // 這里直接寫(xiě)值崇众,不用寫(xiě)參數(shù)名
        <router-link to="/user">用戶(hù)頁(yè)</router-link>
    </div>
    <div>
        <router-view></router-view>
    </div>
</div>
<script>
    var Home = {
        template: '<p>我是主頁(yè)的內(nèi)容~---{{$route.params}}</p>'   // 通過(guò) $route.params 獲取
    }
    var User = {
        template: '<p>我是用戶(hù)的內(nèi)容~</p>'
    }
    const router = new VueRouter({
        routes: [
            {
                path: '/home/:name/:age/:likes',   // 這里定義參數(shù)名
                component: Home
            },
            {
                path: '/user',
                component: User
            }
        ]
    })
    var vm = new Vue({
        el: '#app',
        router
    })
</script>

效果:


ps.以上倆種差異:如果要隱藏參數(shù)用params,如果強(qiáng)制刷新不被清除用query

6航厚、編程式導(dǎo)航

除了使用 <router-link> 創(chuàng)建 a 標(biāo)簽來(lái)定義導(dǎo)航鏈接顷歌,我們還可以借助 router 的實(shí)例方法,通過(guò)編寫(xiě)代碼來(lái)實(shí)現(xiàn)幔睬。
6.1眯漩、router-push()

router.push(location)
<div id="app">
    <div>
        <button @click="push">push</button>   // 定義方法
        <router-link to="/home">主頁(yè)</router-link>
        <router-link to="/user">用戶(hù)頁(yè)</router-link>
    </div>
    <div>
        <router-view></router-view>
    </div>
</div>
<script>
    var Home = {
        template: '<p>我是主頁(yè)的內(nèi)容~</p>'
    }
    var User = {
        template: '<p>我是用戶(hù)的內(nèi)容~</p>'
    }
    const router = new VueRouter({
        routes: [
            {
                path: '/home',
                component: Home
            },
            {
                path: '/user',
                component: User
            }
        ]
    })
    var vm = new Vue({
        el: '#app',
        router,
        methods: {
            push: function () {
                router.push( 'home' );   
            }
        }
    })
</script>


// 1、字符串
router.push( 'home' );   // 這里的字符串是路徑麻顶,而不是name赦抖,不用加/

// 2、對(duì)象
router.push( {path: '/home'} );

// 3辅肾、命名的路由
router.push({name: 'home',params: {color: 'green'}});   // 這里用name队萤,不能用path

// 4矫钓、帶查詢(xún)參數(shù)
router.push({path: '/home',query: {age: 25}});

6.2要尔、router.go(n)
這個(gè)方法的參數(shù)是一個(gè)整數(shù),意思是在 history 記錄中向前或者后退多少步新娜,類(lèi)似 window.history.go(n)赵辕。

router.go(1);

6.3、router.replace()
跟 router.push 很像概龄,唯一的不同就是还惠,它不會(huì)向 history 添加新記錄,而是跟它的方法名一樣 —— 替換掉當(dāng)前的 history 記錄旁钧。

router.replace('home');
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末吸重,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子歪今,更是在濱河造成了極大的恐慌嚎幸,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寄猩,死亡現(xiàn)場(chǎng)離奇詭異嫉晶,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)替废,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)箍铭,“玉大人,你說(shuō)我怎么就攤上這事椎镣≌┗穑” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵状答,是天一觀(guān)的道長(zhǎng)冷守。 經(jīng)常有香客問(wèn)我,道長(zhǎng)惊科,這世上最難降的妖魔是什么拍摇? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮馆截,結(jié)果婚禮上充活,老公的妹妹穿的比我還像新娘。我一直安慰自己蜡娶,他們只是感情好混卵,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著窖张,像睡著了一般淮菠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上荤堪,一...
    開(kāi)封第一講書(shū)人閱讀 51,598評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音枢赔,去河邊找鬼澄阳。 笑死,一個(gè)胖子當(dāng)著我的面吹牛踏拜,可吹牛的內(nèi)容都是我干的碎赢。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼速梗,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼肮塞!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起姻锁,我...
    開(kāi)封第一講書(shū)人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤枕赵,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后位隶,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體拷窜,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了篮昧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赋荆。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖懊昨,靈堂內(nèi)的尸體忽然破棺而出窄潭,到底是詐尸還是另有隱情,我是刑警寧澤酵颁,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布嫉你,位于F島的核電站,受9級(jí)特大地震影響材义,放射性物質(zhì)發(fā)生泄漏均抽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一其掂、第九天 我趴在偏房一處隱蔽的房頂上張望油挥。 院中可真熱鬧,春花似錦款熬、人聲如沸深寥。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)惋鹅。三九已至,卻和暖如春殉簸,著一層夾襖步出監(jiān)牢的瞬間闰集,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工般卑, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留武鲁,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓蝠检,卻偏偏與公主長(zhǎng)得像沐鼠,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子叹谁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • PS:轉(zhuǎn)載請(qǐng)注明出處作者: TigerChain地址http://www.reibang.com/p/9a7d7...
    TigerChain閱讀 63,710評(píng)論 9 218
  • 1焰檩、容易混淆概念:route憔涉,routes,router 1)route析苫,從英文單詞來(lái)看就是單數(shù)监氢,是一條路由布蔗,Ho...
    Sunshine銘閱讀 2,651評(píng)論 0 2
  • 什么是路由? 網(wǎng)絡(luò)頁(yè)面與頁(yè)面跳轉(zhuǎn)浪腐,實(shí)現(xiàn)的都是 標(biāo)簽纵揍, 標(biāo)簽里面有屬性href,給它定義一個(gè)網(wǎng)絡(luò)地址或者路徑的...
    廖馬兒閱讀 2,633評(píng)論 1 17
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,152評(píng)論 25 707
  • 列儂啊閱讀 303評(píng)論 0 0