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>

会在全局暴露VueRouter这个方法,

  • 然后我们要定义好待显示的组件
    var Home={
        template:`<div><h1>home组件
</h1></div>`   
    }
    var About={
        template:`<div><h1>About组件</h1></div>`
    }
  • 定义好路由映射关系
 var routes=[//路线
        //路由表。里面很多路由规则,component:组件名,path路径,数组,里面是一个个对象
        {path:'/home',component:Home,name:'home'},
        {path:'/about',component:About,name:'about'},
        {path:'',component:Home,name:'index'},//默认访问时的组件,但是传统是a链接跳转,底层是锚点
    ]
  • 实例化路由器
 var router=new VueRouter({
        routes:routes,//路由器,属性名属性值一致可以简写成一个
    })//参数为路由映射表
  • 注册路由器
var vm = new Vue({
        el: '#box',   
        router:router,//注册路由器,可以简写成一个 
    })
  • 在实例化的地方box,显示
<div id="box">
 <router-view></router-view>
</div>

打开页面后啥也没有,但是地址栏会出现

//看到这样已经配置成功
    // http://localhost:63342/code/myWorks/mytest/thirdWeek/day2/pmVueRouterTest/vueRouter.html?_ijt=3slbjgsnnnmv6h51omuqds3qdc#/
    /**
     * 在尾部加home,about可以显示相应的内容,但是应该是在页面初次加载就显示,而不是手动地址栏输入
     * */

那我们就加上a标签好了。

<div id="box">
    <!--设置spa应用,显示-->
    <!--    active点中时候是这个状态,就不能使用a链接的描点跳转,router-link-->
    <ul>
        <li><a href="#/home">1</a></li>
        <li><a href="#/about">2</a></li>
    </ul>
 
    <router-view></router-view>
    <!--    最后-->
</div>

这样就能点到哪里跳哪里。但是a标签局限还是有的,我们可以用vue-router给我们的一个标签router-link。
这个标签还挺神奇的,

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

虽然说它默认也是一个a标签,但是可以通过它的属性tag来改变它,但是它这个to="/home"斜杠前面不用加#。另外,那个点击时候有个属性class名
image.png

你可以通过修改这个改变它被点击时候的样式,若你不想用这个名字
也可以另外设置点击时候的class名

var router=new VueRouter({
        routes:routes,//路由器,可以简写成一个
        //还可以自定义点击时候样式的类名
        linkActiveClass:'active'
    })//参数为路由映射表

这个active的这个类,就随你在css设置样式了。

  • 假如给home加上二级菜单呢?同时我点中哪个就要给我传值过来。
  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>`

比如我要点击哪个选项,就会给我在当前页输出这个id,那我来定义一下,点击二级菜单时候会出现的页面是什么样的

  //$route模型变量是vue-router封装好的,主键实例对象就存在,route.params获取动态路由相关参数,id取决于之前明明
    var detral={
        template:`<div><h1>新闻峡谷情 id=</h1></div>`
    }

然后在设置一条路由

{path:'/home/aa/:id/',component:detral,name:'aa'}
//此时:id的这个名称随意,但是一定要冒号。这里设置名称叫id,这里的id为路由动态参数

然后再定义的模板里面拿到这个参数

 //$route模型变量是vue-router封装好的,主键实例对象就存在,route.params获取动态路由相关参数,id取决于之前明明
    var detral={
        template:`<div><h1>新闻峡谷情 id={{$route.params.id}}</h1></div>`
    }

同样你可以设置多个参数

 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>`
    }

这个时候做完你会发现一个小bug,它点击之后是渲染在一级菜单管理下的区域,会覆盖的,所以我们只想让它在特定区域显示的话只能通过路由嵌套了。

模板改成这样

  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>`

路由改写,嵌套一个子路由

 {path:'/home',component:Home,name:'home',children:[
            //这个path不能加上/,因为它将这个path和父级的/home拼接,嵌套路由,让它在该显示的地方显示
                { path:'aa/:id/:type',component:detral,name:'aa'},
            ]},

如果我们想要在about这个模板有个摁扭,是返回前一页呢?就不能用嵌套路由了把,这个。这个时候就要用路由函数了

 var About={
        methods:{
            goback:function () {
                //跳转到home
                // this.$router.push('/home');//会跳转到home,路由参数是$route.params
                //push的路由参数是路由表里面的path
                // this.$router.back();//后退一步,自带的,从哪来,回哪去
                // this.$router.go();//history证书向前,负数向后,有问题
            }
        },
        template:`<div><h1>About组件</h1>
<button @click="goback">回到首页</button>
</div>`
    }

绑定摁扭的事件后再methods里面设置$router自带的函数。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352