vue-router入门

单页应用路由~!vue-router官网

安装和配置

  1. HTML引入vue.js和vue-router.js文件;
  2. 新建js文件,搭建模版;
  3. 关联vue-router;
  4. 关联一个入口,
  5. 完成HTML页面。
var routersArr = [
  {
    path:"/",
    component:{
      template:`
        <div>header</div>
      `
    }
  }{
    path:"/about",
    component:{
      template:`
        <div>about</div>
      `
    }
  }
]var router = new vueRouter({
  routers:routersArr;
})new Vue({
  el:"#app",
  router:router
})

导航跳转,to=""与模版path对应

<div id="app">
  <div>
    <router-link to="/">header</router-link>
    <router-link to="/about">about</router-link>
  </div>
  <div>
    //必须有页面展示区
    <router-view></router-view>
  </div>
</div>

传参 动态路径

  1. path:"/use/:name"传入,this.$route.params.name引用;
  2. path:"/user/:name/post/:post_id"传入多段,this.$route.params={name:"Name",post_id:"postId"}
  3. URL地址htttp://www.xxx.com/use?name=lsd&age=18传入,this.$route.query.age引用;

传参时,改参数只会复用组件,不会重新调用生命钩子,需要watch路由的变化/或beforeRouteUpdate导航守卫,做出响应

子路由

var routerArr = {
  {
    name:"pathName",
    path:"/use/:name",
    component:{
      template:`
      <div>
      <p>hello,$route.params.name ~!</p>
      <router-link to="more" append >more</router-link>
      <router-link :to=`/user/${id}/more`>more</router-link>
      //方法二:<router-link :to="name:'user',params:{name:id}>more</router-link>
      <router-view></router-view>
      </div>`,
      children:`
        <div>more infos</div>
        <p>balabalabalalbala</p>
      `
    }
  }
}
  //路由的子路由跳转链接在显示区,点击后显示子路由显示区页面
  <router-link to="/user/lsd">lsd</router-link>

子路由配置空路径,默认子路由HOME,path:""
子路由路径前没有"/",父路径以"/"开头表示根路径;

跳转–手动访问和手动传参

this.$router.push("/path")/this.$router.push({path:"/"})/this.$router.push({name:"user",params:{userid:"123"}})/this.$router.push({path:"register",query:{plan:"private"}})
子路由this.$router.push({name:"pathName",params:{name:"xxx"}})

提供了path,会忽略params,转而手写完整的参数path:`/user/${userId}`
通过props解耦传参id,利于复用和测试,不同模式作用不同:布尔、对象、函数,详参官网

//this.$router.push()  向history添加记录
<router-link :to=""><router-link>

//this.$router.replace()  同push(),不添加记录
<router-link :to="" replace><router-link>

//this.$router.go(n)  history向前或向后多少步
//效仿了Window.history的API:window.history.pushState,window.history.replaceState,window.history.go;

命名视图

router-view[name]对应path中的components:{name:{template,children}}区分插槽展示多个视图;默认为name:default的视图;

注意:components复数;嵌套视图

导航钩子

  • 全局导航钩子:前置守卫router.beforeEach((to,from,next)=>{})、后置钩子router.afterEach((to,from)=>{})、beforeResolve;
  • 路由独享导航钩子:beforeEnter((to,from,next)=>{})、afterEnter((to,from)=>{});
  • 组件内导航钩子:beforeRouteEnter((to,from,next)=>{})、beforeRouteUpdate((to,from,next)=>{})、beforeRouteLeave((to,from,next)=>{});

路由访问权限设置、管理页面路由权限、路由访问时的拦截导航操作;
拦截器怎样???

重定向

a重定向b,当用户访问/a时,URL会被替换成/b,匹配路由是/b;

const router = new VueRouter ({
	routes:[
		{path:"/a",redirect:{/b}},
		{path:"/a",redirect:{name:"foo"}},
		{path:"/a",redirect:to=>{...}},
		{path:"/a",component:A},
		{path:"/b",name:"foo",component:B}
	]
})

别名

a别名b,当用户访问/b时,URL保持为/b,匹配路由是/a;

const router = new VueRouter ({
	routes:[
		{path:"/a",component:A,alias:"/b"},
	]
})

History模式

vue-router默认hash模式使用URL,URL改变时,页面不会重新加载;
通过设置mode:"history",可以利用window.history.pushState完成跳转不重新加载;

导航守卫

全局前置守卫:需调用next方法,否则钩子不触发resolved;

const router = new VueRouter({...})
router.beforeEach((to,from,next)=>{
	...
	if(...){
		next();//执行to路由
		next(false);//中断to路由,并可以回到from路由
		next("/");//跳转到“/”路由,可以设置任意新的路由
	}
})

全局解析守卫:router.beforeResolve解析之后触发;
全局后置钩子:和守卫不同,不接受next()函数,不改变导航本身;

router.afterEach((to,from)=>{...})//执行某逻辑

路由独享守卫:配置参数和全局一样,在路由上定义

const router = new Router({
	routes:[
		path:"/",
		component:Home,
		beforeEnter:(to,from,next)=>{...}
	]
})

组件内守卫:

const foo = {
	template:'',
	beforeRouteEnter (to ,from ,next){
	//不能获取this,组件实例还没被创建
	},
	beforeRouteUpdate (to ,from ,next){
	//组件被复用时,如动态传参的路由“:id”
	},
	beforeRouteLeave (to ,from ,next){
	//用于离开时,提醒未保存,next(false)中断
	}
}

完整解析流程

路由元信息

routes中每个路由记录(包括子路由),都是一个$route对象,组成$route.matched数组;

router.beforeEach((to,from,next)=>{
if(to.matched.some(...)){
	next(false);
}else{
	next();
}
})

路由过渡效果

<transition name="fade">
	<router-view></router-view>
</transition>

通过<transition>设置,可以在各个组件内分别使用,设置不同的name;
watch $route变化动态赋值:name

获取数据

导航完成后获取:vue生命周期钩子created获取数据,并且可以设置loading状态;
导航完成前获取:组件内守卫钩子设置

export default {
	data(){
		return {}
	},
	created(){...},
	watch:{...},
	beforeRouterEnter (to,from,next){
		...//无法使用this,可以使用vm实例,当前实例未创建
	},
	beforeRouterUpdate (){...}
	befoerRouterLeave (){...}
}

路由懒加载

vue的异步组件配合webpack的code-splitting使用;组件按组分块,使用webpack的特殊注释语法设置chunk name;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值