路由相关——面试题

路由相关

1. 路由之间是怎么跳转的?有哪些方式?

1、<router-link to="需要跳转到页面的路径">

2、this.$router.push()跳转到指定的url,并在history中添加记录,点击回退返回到上一个页面

3、this.$router.replace()跳转到指定的url,但是history中不会添加记录,点击回退到上上个页面

4、this.$touter.go(n)向前或者后跳转n个页面,n可以是正数也可以是负数

2. vue-router怎么配置路由?

在vue中配置路由分为5个步骤,分别是:

  1. 引入vue-router.js
  2. 配置路由path和组件, 和生成路由对象
  3. 把路由对象配置到new Vue中router选项下
  4. 页面使用 承载路由
  5. 设置路由导航(声明式导航方式/编程式跳转)

3. vue-router的钩子函数都有哪些?

关于vue-router中的钩子函数主要分为3类

全局钩子函数要包含beforeEach

beforeEach函数有三个参数,分别是:

  • to:router即将进入的路由对象

  • from:当前导航即将离开的路由

  • next:function,进行管道中的一个钩子,如果执行完了,则导航的状态就是 confirmed
    (确认的)否则为false,终止导航。

单独路由独享组件

beforeEnter

组件内钩子

  • beforeRouterEnter,
  • beforeRouterUpdate,
  • beforeRouterLeave

4. 路由传值的方式有哪几种

Vue-router传参可以分为两大类,分别是编程式的导航 router.push和声明式的导航

router.push

字符串:直接传递路由地址,但是不能传递参数

this.$router.push("home")

​ 对象:

​ 命名路由 这种方式传递参数,目标页面刷新会报错 - name+params

this.$router.push({name:"news",params:{userId:123})

​ 查询参数 和path配对的是query

this.$router.push({path:"/news',query:{uersId:123})

​ 接收参数 this.$route.query

声明式导航

​ 字符串 <router-link to:"news"></router-link>

​ 命名路由 <router-link :to:"{name:'news',params:{userid:1111}}"></route-link>

​ 还可to="/path/值" - 需要提前在路由 规则里值 /path/:key

​ 查询参数 <router-link :to="{path:'/news',query:{userId:1111}}"></router-link>

​ 还可以to="/path?key=value

5. 怎么定义vue-router的动态路由?怎么获取传过来的动态参数?

动态路由指的就是path路径上传智, 前提需要路由规则了提前配置/path/:key名, 可以写多个用/隔开, 获取使用$route.params.key名来提取对应用路径传过来的值

6. Vue的路由实现模式:hash模式和history模式(必会)

hash模式
在浏览器中符号“#”,#以及#后面的字符称之为hash,用 window.location.hash 读取。特点:hash虽然在URL中,但不被包括在HTTP请求中;用来指导浏览器动作,对服务端安全无用,hash不会重加载页面。

history模式
history采用HTML5的新特性;且提供了两个新方法: pushState(), replaceState()可以对浏览器历史记录栈进行修改,以及popState事件的监听到状态变更

7. 请说出路由配置项常用的属性及作用(必会)

​ 路由配置参数:

  • ​ path : 跳转路径
  • ​ component : 路径相对于的组件
  • ​ name:命名路由
  • ​ children:子路由的配置参数(路由嵌套)
  • ​ props:路由解耦
  • ​ redirect : 重定向路由

8. 编程式导航使用的方法以及常用的方法(必会)

​ 路由跳转 : this.$router.push()
​ 路由替换 : this.$router.replace()
​ 后退: this.$router.back()
​ 前进 :this.$router.forward()

9. Vue如何去除URL中的#(必会)

​ vue-router 默认使用 hash 模式,所以在路由加载的时候,项目中的 URL 会自带 “#”。如果不想使用 “#”, 可以使用 vue-router 的另一种模式 history:new Router ({ mode : ‘history’, routes: [ ]})

​ 需要注意的是,当我们启用 history 模式的时候,由于我们的项目是一个单页面应用,所以在路由跳转的时候,就会出现访问不到静态资源而出现 “404” 的情况,这时候就需要服务端增加一个覆盖所有情况的候选资源:如果 URL 匹配不到任何静态资源,则应该返回同一个 “index.html” 页面。

10. 说一下你在vue中踩过的坑(必会)

​ 1、第一个是给对象添加属性的时候,直接通过给data里面的对象添加属性然后赋值,新添加的属性不是响应式的

​ 【解决办法】通过Vue.set(对象,属性,值)这种方式就可以达到,对象新添加的属性是响应式的

2、 在created操作dom的时候,是报错的,获取不到dom,这个时候实例vue实例没有挂载

​ 【解决办法】通过:Vue.nextTick(回调函数进行获取)

11. r o u t e 和 route和 routerouter的区别?

$route是路由信息对象,包括‘path,hash,query,fullPath,matched,name’等路由信息参数;
$router是路由实例对象,包括了路由的跳转方法,实例对象等

12. 跟keep-alive有关的生命周期是哪些?(必会)

1)前言:**在开发Vue项目的时候,大部分组件是没必要多次渲染的,所以Vue提供了一个内置组件keep-alive来缓存组件内部状态,避免重新渲染,在开发Vue项目的时候,大部分组件是没必要多次渲染的,所以Vue提供了一个内置组件keep-alive来缓存组件内部状态,避免重新渲染

2)生命周期函数:**在被keep-alive包含的组件/路由中,会多出两个生命周期的钩子:activated 与 deactivated。

1、activated钩子:**在在组件第一次渲染时会被调用,之后在每次缓存组件被激活时调用。

2、Activated钩子调用时机:** 第一次进入缓存路由/组件,在mounted后面,beforeRouteEnter守卫传给 next 的回调函数之前调用,并且给因为组件被缓存了,再次进入缓存路由、组件时,不会触发这些钩子函数,beforeCreate created beforeMount mounted 都不会触发

  • deactivated钩子:**组件被停用(离开路由)时调用。
  • deactivated钩子调用时机**:使用keep-alive就不会调用beforeDestroy(组件销毁前钩子)和destroyed(组件销毁),因为组件没被销毁,被缓存起来了,这个钩子可以看作beforeDestroy的替代,如果你缓存了组件,要在组件销毁的的时候做一些事情,可以放在这个钩子里,组件内的离开当前路由钩子beforeRouteLeave
    => 路由前置守卫 beforeEach =>全局后置钩子afterEach => deactivated 离开缓存组件 => activated 进入缓存组件(如果你进入的也是缓存路由)
  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值