Vue

vue面试题之二:路由 vue-router 面试题

2019-09-19  本文已影响0人  Arthas_Xue

2. vue路由面试题

1. mvvm框架是什么?

mvvm即Model-View-ViewModel,mvvm的设计原理是基于mvc的

MVVM是Model-View-ViewModel的缩写,Model代表数据模型负责业务逻辑和数据封装,View代表UI组件负责界面和显示,ViewModel监听模型数据的改变和控制视图行为,处理用户交互,简单来说就是通过双向数据绑定把View层和Model层连接起来。在MVVM架构下,View和Model没有直接联系,而是通过ViewModel进行交互,我们只关注业务逻辑,不需要手动操作DOM,不需要关注View和Model的同步工作

2. vue-router是什么?有哪些组件?
3. active-class 是哪个组件的属性?

active-class是router-link终端属性,用来做选中样式的切换,当router-link标签被点击时将会应用这个样式

4. 怎么定义vue-router的动态路由?怎么获取传过来的值?
{
  path: '/details/:id'
  name: 'Details'
  components: Details
}

访问details目录下的所有文件,如果details/a,details/b等,都会映射到Details组件上。

console.log(this.$route.params.id)
5. vue-router有哪几种导航钩子?
const router = new VueRouter({})
router.beforeEach((to, from, next) = {
  // to do somethings
})
* next 方法必须调用,否则钩子函数无法resolved
router.afterEach((to, from) = {
 // to do somethings
})
const router = new VueRouter({
  routes: [
    {
      path: '/home',
      component: Home,
      beforeEnter: (to, from, next) = {
        // to do somethings
        // 参数与全局守卫参数一样
        }
    }
  ]
})
const Home = {
  template: `<div</div`,
  beforeRouteEnter(to, from, next){
    // 在渲染该组件的对应路由被 confirm 前调用
    // 不能获取组件实例 ‘this’,因为当守卫执行前,组件实例还没被创建
  },
  beforeRouteUpdate(to, from, next){
    // 在当前路由改变,但是该组件被复用时调用
    // 例:对于一个动态参数的路径 /home/:id,在/home/1 和 /home/2 之间跳转的时候
    // 由于会渲染同样的 Home 组件,因此组件实例会被复用,而这个钩子就会在这个情况下被调用。
    // 可以访问组件实例 'this'
  },
  beforeRouteLeave(to, from, next){
    // 导航离开该组件的对应路由时调用
    // 可以访问组件实例 'this'
  }
}
const Home = {
  template: `<div</div`,
  beforeRouteEnter(to, from, next){
    next( vm = {
      // 通过 'vm' 访问组件实例
    })
  }
}
6. $route和 $router的区别是什么?
7. vue-router响应路由参数的变化
// 监听当前路由发生变化的时候执行
watch: {
  $route(to, from){
    console.log(to.path)
    // 对路由变化做出响应
  }
}
beforeRouteUpdate(to, from, next){
  // to do somethings
}
8. vue-router 传参
  // 传递参数
  this.$router.push({
    name: Home,
    params: {
        number: 1 ,
        code: '999'
    }
  })
  // 接收参数
  const p = this.$route.params
// 传递参数
this.$router.push({
  name: Home,
  query: {
  number: 1 ,
  code: '999'
}
                  })
// 接收参数
const q = this.$route.query
9. vue-router的两种模式
window.onhashchange = function(event){
  console.log(event.oldURL, event.newURL)
  let hash = location.hash.slice(1)
}
10. vue-router实现路由懒加载(动态加载路由)
const router = new VueRouter({
  routes: [
    {
      path: '/home',
      name: 'Home',
      component:() = import('../views/home')
        }
  ]
})

以上是经过参考很多同行分享与官方文档,汇总的一份总结,如有不对,请指出,最后感谢大家观看,求点赞,求分享,求评论,求打赏~~

上一篇 下一篇

猜你喜欢

热点阅读