vue的路由與嵌套路由

1.首先我們要引入vue文件和vue-router文件,可以用在線的cnd鏈接

 <script src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script>
    <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>

會(huì)在全局暴露VueRouter這個(gè)方法,

  • 然后我們要定義好待顯示的組件
    var Home={
        template:`<div><h1>home組件
</h1></div>`   
    }
    var About={
        template:`<div><h1>About組件</h1></div>`
    }
  • 定義好路由映射關(guān)系
 var routes=[//路線
        //路由表。里面很多路由規(guī)則,component:組件名,path路徑,數(shù)組,里面是一個(gè)個(gè)對(duì)象
        {path:'/home',component:Home,name:'home'},
        {path:'/about',component:About,name:'about'},
        {path:'',component:Home,name:'index'},//默認(rèn)訪問(wèn)時(shí)的組件,但是傳統(tǒng)是a鏈接跳轉(zhuǎn),底層是錨點(diǎn)
    ]
  • 實(shí)例化路由器
 var router=new VueRouter({
        routes:routes,//路由器,屬性名屬性值一致可以簡(jiǎn)寫成一個(gè)
    })//參數(shù)為路由映射表
  • 注冊(cè)路由器
var vm = new Vue({
        el: '#box',   
        router:router,//注冊(cè)路由器,可以簡(jiǎn)寫成一個(gè) 
    })
  • 在實(shí)例化的地方box,顯示
<div id="box">
 <router-view></router-view>
</div>

打開(kāi)頁(yè)面后啥也沒(méi)有,但是地址欄會(huì)出現(xiàn)

//看到這樣已經(jīng)配置成功
    // http://localhost:63342/code/myWorks/mytest/thirdWeek/day2/pmVueRouterTest/vueRouter.html?_ijt=3slbjgsnnnmv6h51omuqds3qdc#/
    /**
     * 在尾部加home,about可以顯示相應(yīng)的內(nèi)容,但是應(yīng)該是在頁(yè)面初次加載就顯示,而不是手動(dòng)地址欄輸入
     * */

那我們就加上a標(biāo)簽好了。

<div id="box">
    <!--設(shè)置spa應(yīng)用,顯示-->
    <!--    active點(diǎn)中時(shí)候是這個(gè)狀態(tài),就不能使用a鏈接的描點(diǎn)跳轉(zhuǎn),router-link-->
    <ul>
        <li><a href="#/home">1</a></li>
        <li><a href="#/about">2</a></li>
    </ul>
 
    <router-view></router-view>
    <!--    最后-->
</div>

這樣就能點(diǎn)到哪里跳哪里。但是a標(biāo)簽局限還是有的,我們可以用vue-router給我們的一個(gè)標(biāo)簽router-link。
這個(gè)標(biāo)簽還挺神奇的,

  <li><router-link to="/home" tag="button">2</router-link></li>
        <li><router-link to="/about">3</router-link></li>

雖然說(shuō)它默認(rèn)也是一個(gè)a標(biāo)簽,但是可以通過(guò)它的屬性tag來(lái)改變它,但是它這個(gè)to="/home"斜杠前面不用加#。另外,那個(gè)點(diǎn)擊時(shí)候有個(gè)屬性class名
image.png

你可以通過(guò)修改這個(gè)改變它被點(diǎn)擊時(shí)候的樣式,若你不想用這個(gè)名字
也可以另外設(shè)置點(diǎn)擊時(shí)候的class名

var router=new VueRouter({
        routes:routes,//路由器,可以簡(jiǎn)寫成一個(gè)
        //還可以自定義點(diǎn)擊時(shí)候樣式的類名
        linkActiveClass:'active'
    })//參數(shù)為路由映射表

這個(gè)active的這個(gè)類,就隨你在css設(shè)置樣式了。

  • 假如給home加上二級(jí)菜單呢?同時(shí)我點(diǎn)中哪個(gè)就要給我傳值過(guò)來(lái)。
  var Home={
        template:`<div><h1>home組件
<ul>
<li><a href="#/home/aa/1">哈哈</a></li>
<li><a href="#/home/aa/2">哈哈哈</a></li>
<li><a href="#/home/aa/3">哈哈哈</a></li>
</ul>
</h1></div>`

比如我要點(diǎn)擊哪個(gè)選項(xiàng),就會(huì)給我在當(dāng)前頁(yè)輸出這個(gè)id,那我來(lái)定義一下,點(diǎn)擊二級(jí)菜單時(shí)候會(huì)出現(xiàn)的頁(yè)面是什么樣的

  //$route模型變量是vue-router封裝好的,主鍵實(shí)例對(duì)象就存在,route.params獲取動(dòng)態(tài)路由相關(guān)參數(shù),id取決于之前明明
    var detral={
        template:`<div><h1>新聞峽谷情 id=</h1></div>`
    }

然后在設(shè)置一條路由

{path:'/home/aa/:id/',component:detral,name:'aa'}
//此時(shí):id的這個(gè)名稱隨意,但是一定要冒號(hào)。這里設(shè)置名稱叫id,這里的id為路由動(dòng)態(tài)參數(shù)

然后再定義的模板里面拿到這個(gè)參數(shù)

 //$route模型變量是vue-router封裝好的,主鍵實(shí)例對(duì)象就存在,route.params獲取動(dòng)態(tài)路由相關(guān)參數(shù),id取決于之前明明
    var detral={
        template:`<div><h1>新聞峽谷情 id={{$route.params.id}}</h1></div>`
    }

同樣你可以設(shè)置多個(gè)參數(shù)

 var Home={
        template:`<div><h1>home組件
<ul>
<li><a href="#/home/aa/1/jingrong">哈哈</a></li>
<li><a href="#/home/aa/2/xixi">哈哈哈</a></li>
<li><a href="#/home/aa/3/lala">哈哈哈</a></li>
</ul>
</h1></div>`

路由表里面

{path:'/home/aa/:id/:type',component:detral,name:'aa'}

模板修改

 var detral={
        template:`<div><h1>新聞峽谷情 id={{$route.params.id}}{{$route.params.type}}</h1></div>`
    }

這個(gè)時(shí)候做完你會(huì)發(fā)現(xiàn)一個(gè)小bug,它點(diǎn)擊之后是渲染在一級(jí)菜單管理下的區(qū)域,會(huì)覆蓋的,所以我們只想讓它在特定區(qū)域顯示的話只能通過(guò)路由嵌套了。

模板改成這樣

  var Home={
        template:`<div><h1>home組件
<ul>
<li><a href="#/home/aa/1/jingrong">哈哈</a></li>
<li><a href="#/home/aa/2/xixi">哈哈哈</a></li>
<li><a href="#/home/aa/3/lala">哈哈哈</a></li>
</ul>
<div>詳情在這里顯示<router-view></router-view></div>

</h1></div>`

路由改寫,嵌套一個(gè)子路由

 {path:'/home',component:Home,name:'home',children:[
            //這個(gè)path不能加上/,因?yàn)樗鼘⑦@個(gè)path和父級(jí)的/home拼接,嵌套路由,讓它在該顯示的地方顯示
                { path:'aa/:id/:type',component:detral,name:'aa'},
            ]},

如果我們想要在about這個(gè)模板有個(gè)摁扭,是返回前一頁(yè)呢?就不能用嵌套路由了把,這個(gè)。這個(gè)時(shí)候就要用路由函數(shù)了

 var About={
        methods:{
            goback:function () {
                //跳轉(zhuǎn)到home
                // this.$router.push('/home');//會(huì)跳轉(zhuǎn)到home,路由參數(shù)是$route.params
                //push的路由參數(shù)是路由表里面的path
                // this.$router.back();//后退一步,自帶的,從哪來(lái),回哪去
                // this.$router.go();//history證書(shū)向前,負(fù)數(shù)向后,有問(wèn)題
            }
        },
        template:`<div><h1>About組件</h1>
<button @click="goback">回到首頁(yè)</button>
</div>`
    }

綁定摁扭的事件后再methods里面設(shè)置$router自帶的函數(shù)。

最后編輯于
?著作權(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ù)。

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