摘要:前言一个包含的简单,从第一个开始,依次深入学习,即可快速上手强大的。
前言
一个包含 vue-router的简单demos,从第一个demo开始,依次深入学习,即可快速上手强大的vue-router。
如何使用安装模块pure 或 http-server来启动服务器
npm install -g puer or npm install -g http-server
克隆仓库
启动服务
http-server -p 8000 or puer -p 8000,浏览器自动打开 localhost:8000
vue.js官方的路由,深度结合了vue.js核心内容,可以很方便的创建单页面应用(PWA),具有如下特点:
嵌套路由/视图
模块化、基于组件的配置
路由参数、查询
与vue.js一样的视图过渡效果
github source
Demo 01 - start一个快速上手vue-router的例子
index.html
js file
const Home = {template: "Demo 02 - dynamic routerHome page"} const About = {template: "About page"} const router = new VueRouter({ routes: [ {path:"/home",component:Home}, {path:"/about",component:About}, ] }) new Vue({ router, }).$mount("#app")
动态路由匹配,匹配同一个路由下的子路由,如/about/xin和/about/mine,:id 为参数
index.html
js file
const About = {template: "Demo 03 - nested routerAbout page: {{$route.params.id}}"} const router = new VueRouter({ routes: [ {path:"/about/:id",component:About}, ] }) new Vue({ router, }).$mount("#app")
嵌套路由
index.html
js file
const Home = {template: "Demo 04 - nested router children routerHome page"} const AboutProfile = {template: "AboutProfile"} const AboutEdit = {template: "AboutEdit"} const About = { template: `{{$route.params.id}}` } const router = new VueRouter({ routes: [ {path:"/home",component:Home}, { path:"/about/:id", component:About, children: [ {path:"profile",component: AboutProfile,}, {path:"edit",component: AboutEdit,} ] }, ] }) new Vue({ router, }).$mount("#app")
嵌套路由,通过在一个路由里面设置children,即可嵌套路由,子路由下的嵌套设置与主路由的设置是一样的
index.html
js file
const About = { template: `Demo 05 - nested router with query paramsAbout` } const User = { template: `` } const UserStart = { template: ` ` } const UserProfile = { // /user/xin template: ` ` } const router = new VueRouter({ routes: [ {path: "/about", component: About}, {path: "/user", component: User, children: [ {path: "", component: UserStart}, {path: ":id", component: UserProfile}, ]} ] }) new Vue({ router, }).$mount("#app")user-{{ $route.params.id }}
嵌套路由,带查询参数,$route.query下为所查询的参数,通过:to绑定参数,与to功能一致
index.html
js file
const About = { template: `Demo 06 - programed nav routerAbout` } const User = { template: `` } const UserStart = { template: ` ` } const UserProfile = { // /user/xin data() { return { id: this.$route.params.id, } }, template: `user-{{ $route.params.id }}
` } const UserEdit = { // /user/xin/edit template: `id: {{id}}
edit ` } const router = new VueRouter({ routes: [ {path: "/about", component: About}, {path: "/user", component: User, children: [ {path: "", component: UserStart}, {path: ":id", component: UserProfile}, {path: ":id/edit", component: UserEdit,name:"userEdit"}, ]} ] })local: {{$route.query.local}}
limit: {{$route.query.limit}}
this.$router.push("/")与
index.html
js file
const Home = { template: `Demo 07 - named routerHome page`, } const About = {template: "About page: {{$route.params.id}}"} const router = new VueRouter({ routes: [ {path:"/home",component:Home}, {path:"/about/:id",component:About}, ] }) new Vue({ router, methods: { nav2home() { this.$router.push("/") } } }).$mount("#app")
可以通过给路由命名,并通过绑定属性:to的方式来定义路由
index.html
js file
const User = { template: `Demo 08 - named viewsuser page`, } const About = {template: "About page: {{$route.params.id}}"} const router = new VueRouter({ routes: [ { path:"/user/:userId", component: User, name: "user" }, {path:"/about/:id",component:About}, ] }) new Vue({ router, methods: { nav2home() { console.log(this.$router); this.$router.push("/") } } }).$mount("#app")
命名视图,可以指定多个
index.html
js file
const Dasiy = {template: `Demo 09 - named views with nested router1. Daisy`}; const Lily = {template: `2. Lily`}; const Violet = {template: `3. Violet`}; const router = new VueRouter({ routes: [{ path: "/", components: { default: Dasiy, // default router a: Lily, b: Violet, } }, { path: "/my", components: { default: Lily, // default router a: Violet, b: Dasiy, } }] }) router.push("/") new Vue({ router, }).$mount("#app")
嵌套路由中使用命名视图
index.html
js file
const Navbar = { template: `Demo 10 - redirect` } // 添加了普通组件nav const UserDetail = { template: `phone `, components: {Navbar} } // 路由匹配 /user/phone const UserPhone = { template: ` My phone` } // 路由匹配 /user/email const UserEmail = { template: `My email` } const UserEmailhelp = { template: `My email help` } const router = new VueRouter({ routes: [ { path: "/user", component: UserDetail, children: [ {path: "phone", component: UserPhone}, { path: "email", // 路由匹配到/user/email时,当有多个router-view时 // 将会根据视图的别名分别进行渲染,没有别名渲染默认的模板 components: { default: UserEmail, help: UserEmailhelp, } } ] } ] }) router.push("/user") new Vue({ router, }).$mount("#app")
路由的重定向,访问/about将会跳转到/xin
index.html
js file
const About = {template: "Demo 11 - alaisAbout page"} const Xin = {template: "Xin page"} const router = new VueRouter({ routes: [ {path:"/about",redirect: "/xin"}, {path:"/xin",component:Xin}, ] }) router.push("/") new Vue({ router, }).$mount("#app")
路由的别名,访问/about与/xin的内容是一样的,共用一个组件
index.html
js file
const About = {template: "About page"} const Xin = {template: "Xin page"} const router = new VueRouter({ routes: [ {path: "/about", component: About, alias: "/xin"} ] }) router.push("/") new Vue({ router, }).$mount("#app")
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/95297.html
摘要:新闻热点国内国外,前端最新动态苹果开源了版近日,苹果开源了一款基于事件驱动的跨平台网络应用程序开发框架,它有点类似,但开发语言使用的是。苹果称的目标是帮助开发者快速开发出高性能且易于维护的服务器端和客户端应用协议。 showImg(https://segmentfault.com/img/remote/1460000013677379); 前端每周清单专注大前端领域内容,以对外文资料的...
摘要:哪吒别人的看法都是狗屁,你是谁只有你自己说了才算,这是爹教我的道理。哪吒去他个鸟命我命由我,不由天是魔是仙,我自己决定哪吒白白搭上一条人命,你傻不傻敖丙不傻谁和你做朋友太乙真人人是否能够改变命运,我不晓得。我只晓得,不认命是哪吒的命。 showImg(https://segmentfault.com/img/bVbwiGL?w=900&h=378); 出处 查看github最新的Vue...
摘要:后端开发的疑惑后端开发最常面对的一个问题性能高并发等等。而到了时代,在方面有了前后端分离概念移动后端更是无力渲染天然前后端分离。 先来上一张前端页面的效果图(Vue + Vux + Vuex + Vue-Router)。showImg(https://segmentfault.com/img/remote/1460000010207850); 第一次做gif 没什么经验,太大了。加载...
摘要:不过仔细了解了一段时候发现,其实他的原理是很简单的,所以想要自己也动手实现一个功能类似的框架。原文地址从零开始实现一个简易的框架 前言 最近在看spring-boot框架的源码,看了源码之后更是让我感受到了spring-boot功能的强大。而且使用了很多的设计模式,让人在看的时候觉得有点难以下手。 不过仔细了解了一段时候发现,其实他的原理是很简单的,所以想要自己也动手实现一个功能类似的...
阅读 2667·2021-11-24 09:38
阅读 1981·2019-08-30 15:53
阅读 1236·2019-08-30 15:44
阅读 3231·2019-08-30 14:10
阅读 3581·2019-08-29 16:29
阅读 1802·2019-08-29 16:23
阅读 1101·2019-08-29 16:20
阅读 1473·2019-08-29 11:13