先来看看效果图:

为了方便讲解,我没有使用vue脚手架,如果需要的,可以留言跟我要。不多说开工:

首先,html先组上

 <div id="app">
<div>
<router-link to="/index">首页</router-link>
<router-link to="/news">新闻</router-link>
<router-link to="/friend">朋友圈</router-link>
<router-view></router-view>
</div> </div>
这个没什么要说的把,不懂html我也没招,router-link  页面路径 router-view vue展现视图
接下来就是vuejs的代码,我说下思路吧,针对新手思路:首先我们先写一级的路由,先不考虑二级的。写好了一层的再去考虑二层的,这是一层路由代码,这是注释都写全了就不一行行解释了。

 //    注册新闻列表模块
Vue.component('newstpl',{
template:'<div><h2>新闻页</h2></div>',
});
// 注册朋友圈列表模块
Vue.component('firendlist',{
template:'<div><h1><center>朋友圈</center></h1></div>',
})
//首页内容
const indexhtml={
template:"<div><h3>主页内容</h3></div>"
}
//新闻页面内容
const newhtml={
template:'<newstpl></newstpl>'
}
//朋友圈页面内容
const firendhtml={
template:'<firendlist></firendlist>',
}
//声明路由器
const routes=[
{path:'/index',component:indexhtml,
},
{path:'/news',component:newhtml,
},
{path:'/friend',component:firendhtml},
]
//注册路由
const router = new VueRouter({
routes
})
//绑定
new Vue({
el:'#app',
router, })

好了,一层实现完毕,启动看看,好没问题,咱们往下走,下面我讲细一点吧  有点复杂。
咱们一共首页、朋友圈和新闻三个模块。一个个来
首页,相对简单。就是简单的二层路由
 const indexhtml={
template:"<div><h3>主页内容</h3><p><router-link to='/index/zhuce'>注册</router-link> <router-link to='/index/login'>登录</router-link></router-link></p><router-view></router-view></div>"
}
首先把indexhtml改成如上一般,增加注册和登录两个模块,既然增加了这俩模块,那肯定也要有魔板对吧,
//注册页面
const zhuce={
template:'<div>我是注册页面</div>'
}
//登录页面
const login={
template:'<div>我是登录页面</div>'
}
模版有了,那么就是写进路由了,路由怎么写呢?
  
  {path:'/index/login',component:login}, 
这么写么?大家想一下,这么写可以么
首先,这么写相当于直接到了登录页面,却不显示index页面了,
再者,这样完全不利于代码的可读性,想象一下,另外的人去看你代码,那么多路由,谁知道对应哪里呢?不利于工作需要,
下面上正确的代码,
 {path:'/index',component:indexhtml,
children:[
{path:'zhuce',component:zhuce},
{path:'login',component:login},
]
}

来说说吧,多层路由增加一个childred数组,简单吧,也可以继续嵌套,多层嵌套即可
想直接copy代码的可以看最后,可以分享所有代码。 这样简单的实现了首页的效果,再来说说新闻页面把,首先我考虑的是假如是一个后台系统,用户自定义的新闻路径,那么肯定不能是写死的地址,对吧,然后就是他的列表,肯定就要通过一个数组存储(本文中所有都是本地数据,需要服务器数据的可以留言我),在这他列表点击肯定要显示他的新闻内容,这个内容肯定不能写死地址,所以第一时间就想到了动态路由,也是本文的重点,下面开始吧(以下代码使用了watch监听,个人不推荐使用watch来制作页面,特别耗费资源,本文这么做是因为要讲解动态路由,但是不想全加载一个内容,并且当时写的时候有人问了我watch相关的,所以用了,好了不多说,说道用的时候再说替换方法)
首先我们要注册一个新闻列表的模块
 //    注册新闻列表模块
Vue.component('newstpl',{
template:'<div><h2>新闻页</h2><ul><li v-for="i in list"><router-link :to=" \'/news/\' + i.path">{{i.name}}</router-link></li></ul><router-view></router-view></div>',
data(){
return {
list:[
{name:'新闻一',path:'new1'},
{name:'新闻二',path:'new2'},
{name:'新闻三',path:'new3'}
], }
}
});
也需要注册一个内容页的模块
 //    注册新闻内容模块 实现内容针对性
Vue.component('contenttpl',{
props: {
data1: {
default: 'new4'
}
},
template:`<div><h1>{{yemian[0].title}}</h1><h2>{{yemian[0].content}}</h2></div>`,
data(){
return {
yemian:[{}],
newlist:[
{title:'new1',content:'新闻一的内容'},
{title:'new2',content:'新闻er的内容'},
{title:'new3',content:'新闻san的内容'},
]
}
},
watch:{
data1(){
this.myfunction() }
},
mounted(){
this.myfunction()
},
methods:{
myfunction(){ this.yemian = this.newlist.filter(item=>{
return item.title==this.data1; })
},
},
});
这段比较长,说一下把,首先watch这个完全可以换成在列表加载出来之后去后台直接获取完整地址,再用完整地址来更新view,
在这说说我为什么需要一个myfunction这个函数,首先这也是watch和路由配合的一个缺点,用watch监听参数变化时候,怎么动态去更新内容呢,所以我增加了watch监听,但是发现模版第一次加载时候不生效,这是因为我第一次点击时候是传参,所以在魔板生成时候就已经有了这个,即便增加默认值也是不行的,所以增加了一个方法,开始就触发一遍,
filter是js语法,不懂得可以去查查,不多讲
接下来就是配置这个路由,
 {path:'/news',component:newhtml,
children:[
{path:'/news/:id',component:{
template:'<contenttpl :data1="$route.params.id"></contenttpl>'
}}
]
},

contenttpl这个上面注册了,上面提到我考虑后台数据,不确定的情况,所以需要传参更改内容(又是watch的锅),如果用我提到的另外一种方法可以避免这么麻烦,感兴趣的可以找我要。
$route.params.id 获取动态路由的值


不懂得可以看看route第二章
https://router.vuejs.org/zh-cn/essentials/dynamic-matching.html
大约在第二屏

接下来就是朋友圈这个,这个上面的gif就看出来了,把第二个看完,第三个就是留给你自己练习的,看完本文的朋友去练习把,下面分享本页面的全部代码
 <!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>vueroter 学习</title>
</head>
<body>
<div id="app">
<div>
<router-link to="/index">首页</router-link>
<router-link to="/news">新闻</router-link>
<router-link to="/friend">朋友圈</router-link>
<router-view></router-view>
</div> </div> <script src="https://unpkg.com/vue/dist/vue.js"></script>
<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
<script>
// 注册新闻列表模块
Vue.component('newstpl',{
template:'<div><h2>新闻页</h2><ul><li v-for="i in list"><router-link :to=" \'/news/\' + i.path">{{i.name}}</router-link></li></ul><router-view></router-view></div>',
data(){
return {
list:[
{name:'新闻一',path:'new1'},
{name:'新闻二',path:'new2'},
{name:'新闻三',path:'new3'}
], }
}
});
// 注册新闻内容模块 实现内容针对性
Vue.component('contenttpl',{
props: {
data1: {
default: 'new4'
}
},
template:`<div><h1>{{yemian[0].title}}</h1><h2>{{yemian[0].content}}</h2></div>`,
data(){
return {
yemian:[{}],
newlist:[
{title:'new1',content:'新闻一的内容'},
{title:'new2',content:'新闻er的内容'},
{title:'new3',content:'新闻san的内容'},
]
}
},
watch:{
data1(){
this.myfunction() }
},
mounted(){
this.myfunction()
},
methods:{
myfunction(){ this.yemian = this.newlist.filter(item=>{
return item.title==this.data1; })
}, }, });
// 注册朋友圈列表模块
Vue.component('firendlist',{
template:'<div><h1><center>朋友圈</center></h1><ul><li v-for="t in firendlist">{{t.name}}</li></ul></div>',
data(){
return {
firendlist:[
{name:'1'},
{name:'2'},
{name:'3'},
{name:'4'},
{name:'5'},
{name:'6'},
{name:'7'},
{name:'8'},
{name:'9'},
{name:'10'},
{name:'11'},
{name:'12'},
]
}
}
})
//首页内容
const indexhtml={
template:"<div><h3>主页内容</h3><p><router-link to='/index/zhuce'>注册</router-link> <router-link to='/index/login'>登录</router-link></router-link></p><router-view></router-view></div>" }
//新闻页面内容
const newhtml={
template:'<newstpl></newstpl>' }
//朋友圈页面内容
const firendhtml={
template:'<firendlist></firendlist>', }
//注册页面
const zhuce={
template:'<div>我是注册页面</div>'
}
//登录页面
const login={
template:'<div>我是登录页面</div>'
} //声明路由器
const routes=[
{path:'/index',component:indexhtml,
children:[
{path:'zhuce',component:zhuce},
{path:'login',component:login},
]
},
{path:'/news',component:newhtml,
children:[
{path:'/news/:id',component:{
template:'<contenttpl :data1="$route.params.id"></contenttpl>'
}}
]
},
{path:'/friend',component:firendhtml}, ]
//注册路由
const router = new VueRouter({
routes
})
//绑定
new Vue({
el:'#app',
router, })
</script>
</body>
</html>

以上是本文全部代码,不喜勿喷,本文分享结束。转载需要注明原处

【原创】一篇学会vue路由配置 、 动态路由 、多层路由(实例)的更多相关文章

  1. Vue结合路由配置递归实现菜单栏

    作者:小土豆biubiubiu 博客园:https://www.cnblogs.com/HouJiao/ 掘金:https://juejin.im/user/58c61b4361ff4b005d9e8 ...

  2. vue路由配置,vue子路由配置

    上一篇关于vue环境配置已经写好了!按照操作就行了! 现在一个项目已经部署完成,接下来我们从路由开始! 还记得在初始化项目的时候,有提示是否需要安装vue-router,对没错,vue中路由全靠它! ...

  3. 路由器基本配置实验,静态路由和动态RIP路由

    实验涉及命令以及知识补充 连线 PC和交换机FastEtherNet接口 交换机和路由器FastEtherNet接口 路由器和路由器Serial接口 serial是串行口,一般用于连接设备,不能连接电 ...

  4. vue 路由配置

    1.不带参数的路由配置 及 跳转 //路由配置: { name: "a", path: "/a", component: a }   页面跳转: this.$r ...

  5. Spring Cloud构建微服务架构:服务网关(路由配置)【Dalston版】

    转载:http://blog.didispace.com/spring-cloud-starter-dalston-6-2/ 原创  2017-08-26  翟永超  Spring Cloud 被围观 ...

  6. 一、虚拟环境.二、路由配置主页与404.三、2.x路由分发.四、伪静态.五、request对象.六、FBV与CBV.七、文件上传.

    一.虚拟环境 ''' 解决版本共存 1. 用pycharm选择File点击NewProject然后选择virtualenv创建一个纯净环境 2. 打开下载的目录将venv文件夹下的所有文件(纯净的环境 ...

  7. vue-route(三)后台管理路由配置

    在一个后台管理的项目中,关于路由的配置,     我们需要实现的一个布局是header,aside,main三部分,后期还可能添加footer部分,实现的需求是请求数据时,局部的刷新,这个时候我们就需 ...

  8. Spring Cloud架构教程 (四)服务网关(路由配置)

    传统路由配置 所谓的传统路由配置方式就是在不依赖于服务发现机制的情况下,通过在配置文件中具体指定每个路由表达式与服务实例的映射关系来实现API网关对外部请求的路由. 没有Eureka和Consul的服 ...

  9. IP路由__动态路由

    1.使用协议来查找网络并更新路由表的配置,就是动态路由.它比使用静态或默认路由方便,但它需要一定的路由器CPU处理时间和网络链接带宽.路由协议定义了路由器与相邻路由器通信时所使用的一组规则. 在互联网 ...

随机推荐

  1. [特征工程]-------使用sklearn做单机特征工程[转载]

    https://www.cnblogs.com/jasonfreak/p/5448385.html 使用sklearn做单机特征工程 目录 1 特征工程是什么?2 数据预处理 2.1 无量纲化 2.1 ...

  2. 列表 & 元组& join & range

    一:列表(增删改查,列表的嵌套,列表的循环) 1)增加 append    (在列表的尾部增加) insert       (插入)   insert(插入的位置,插入的内容) extend      ...

  3. git常用操作命令使用说明

    设置用户名和邮箱 git config --global user.email 'xxx' git config --global user.name 'xxx' 创建分支 git branch xx ...

  4. 在 Django/Flask 开发服务器上使用 HTTPS

    使用 Django 或 Flask 这种框架开发 web app 的时候一般都会用内建服务器开发和调试程序,等程序完成后再移交到生产环境部署.问题是这些内建服务器通常都不支持 HTTPS,我们想在开发 ...

  5. cocos2d-x JS 富文本

    var str1 = "兑换成功后,系统会生成“";var str2 = "红包兑换码";var str3 = "”,请复制该兑换码,并粘贴在&quo ...

  6. C#ImageList和ListView的使用

    一.ImageList  ImageList组件,又称为图片存储组件,它主要用于存储图片资源,然后在控件上显示出来,这样就简化了对图片的管理.ImageList组件的主要属性是Images,它包含关联 ...

  7. axios的基本概念及安装配置方法

    ajax:异步请求,是一种无需再重新加载整个网页的情况下,能够更新部分网页的技术 axios:用于浏览器和node.js的基于promise的HTTP客户端 1.从浏览器制作XMLHttpReques ...

  8. 第二篇——Struts2的Action搜索顺序

    Struts2的Action的搜索顺序: 地址:http://localhost:8080/path1/path2/student.action     1.判断package是否存在,例如:/pat ...

  9. Rest和Restful & http

    Rest :Representational State Transfer 表述性状态转移 Restful: Rest+ful形容词,遵循Rest原则的应用程序或设计 Rest原则: 1. 网络上的所 ...

  10. javascript:void(0) 和 href="#"的区别

    <a href="javascript:void(0);">点击 <a href="#">点击 如果使用下面一种方式,会跳到网页顶部. ...