Второй вопрос интервью Vue: маршрутизация вопросов интервью vue-router

vue-router

2. Вопросы для собеседования по маршрутизации Vue

1. Что такое структура mvvm?

mvvm — это Model-View-ViewModel, принцип проектирования mvvm основан на mvc.

MVVM — это сокращение от Model-View-ViewModel. Модель представляет модель данных и отвечает за бизнес-логику и инкапсуляцию данных. Представление представляет компонент пользовательского интерфейса, отвечающий за интерфейс и отображение. ViewModel отслеживает изменения в данных модели и управляет поведением представления, а также обрабатывает взаимодействие с пользователем. Двусторонняя привязка данных соединяет слой представления со слоем модели. В архитектуре MVVM View и Model не связаны напрямую, а взаимодействуют через ViewModel.Мы ориентируемся только на бизнес-логику, не нужно вручную манипулировать DOM и не нужно обращать внимание на синхронизацию между Вид и модель.

2. Что такое vue-маршрутизатор? Что такое компоненты?
  • Vue-маршрутизаторVue.jsОфициальный менеджер маршрута. Он глубоко интегрирован с ядром Vue.js, что упрощает создание одностраничных приложений.
  • <router-link>и<router-view>и<keep-alive>
3. Свойством какого компонента является активный класс?

active-class – это атрибут терминала router-link, который используется для переключения выбранного стиля. Этот стиль будет применяться при нажатии на метку router-link.

4. Как определить динамическую маршрутизацию vue-router? Как получить переданное значение?
  • Создание динамических маршрутов в основном заключается в использовании параметров динамического пути в процессе использования атрибута пути, начиная с двоеточия, следующим образом:
{
  path: '/details/:id'
  name: 'Details'
  components: Details
}

Доступ ко всем файлам в каталоге сведений, если сведения/а, сведения/б и т. д. будут сопоставлены с компонентом сведений.

  • При сопоставлении маршрута в /details значение параметра будет установлено в this.$route.params, поэтому через это свойство можно получить динамические параметры.
console.log(this.$route.params.id)
5. Какие навигационные крючки есть у vue-router?
  • Глобальная передняя защита
const router = new VueRouter({})
router.beforeEach((to, from, next) = {
  // to do somethings
})
  • to:Route, представляет цель для входа, это объект маршрута.

  • from:Route, представляет маршрут, который в данный момент уходит, а также является объектом маршрута.

  • next:Function, метод, который необходимо вызвать, конкретный эффект выполнения зависит от параметров следующего вызова метода

    • next(): введите следующий хук в конвейере.Если все хуки выполнены, статус навигации подтвержден (подтвержден)
    • next(false): Текущая навигация терминала. Если URL-адрес браузера изменится, URL-адрес будет перезаряжен на адрес, соответствующий исходному маршруту.
    • next('/')||next({path:'/'}): Перейти к другому адресу. Текущий навигационный терминал выполняет новую навигацию.
* Следующий метод должен быть вызван, иначе функция ловушки не может быть разрешена
  • глобальный почтовый хук
router.afterEach((to, from) = {
 // to do somethings
})
  • Хук сообщения не имеет следующей функции и не меняет саму навигацию.

  • Эксклюзивный хук маршрутизации

    • beforEnter
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'
  }
}
  • beforeRouterEnter не может получить к этому доступ, потому что защита вызывается до подтверждения навигации, поэтому новый компонент не был создан, вы можете получить доступ к экземпляру компонента, передав обратный вызов next. Выполните обратный вызов, когда навигация будет подтверждена, и передайте экземпляр в качестве параметра метода обратного вызова.
const Home = {
  template: `<div></div>`,
  beforeRouteEnter(to, from, next){
    next( vm = {
      // 通过 'vm' 访问组件实例
    })
  }
}
6. В чем разница между $route и $router?
  • router — это экземпляр VueRouter, который является глобальным объектом маршрутизации, включая методы перехода маршрутизации, функции ловушек и т. д.
  • route — это объект информации о маршрутизации||объект маршрутизации перехода, каждый маршрут будет иметь объект маршрута, который является локальным объектом, включая путь, параметры, хэш, запрос, полный путь, сопоставление, имя и другие параметры информации о маршрутизации.
7. vue-router реагирует на изменение параметров маршрутизации
  • Обнаружение с часами
// 监听当前路由发生变化的时候执行
watch: {
  $route(to, from){
    console.log(to.path)
    // 对路由变化做出响应
  }
}
  • Встроенная функция навигационного хука
beforeRouteUpdate(to, from, next){
  // to do somethings
}
8. параметры vue-маршрутизатора
  • Params
    • Можно использовать только имя, нельзя использовать путь
    • Параметры не отображаются на пути
    • Параметры принудительного обновления браузера будут очищены,
  // 传递参数
  this.$router.push({
    name: Home,
    params: {
    	number: 1 ,
    	code: '999'
  	}
  })
  // 接收参数
  const p = this.$route.params
  • Query:

    • Параметры будут отображаться на пути, обновление не будет очищено
    • имя может использовать путь путь
// 传递参数
this.$router.push({
  name: Home,
  query: {
  number: 1 ,
  code: '999'
}
                  })
// 接收参数
const q = this.$route.query
9. Два режима vue-router
  • hash

    • Принцип - событие onhashchage, которое можно отслеживать на объекте окна
window.onhashchange = function(event){
  console.log(event.oldURL, event.newURL)
  let hash = location.hash.slice(1)
}
  • history

    • Воспользуйтесь преимуществами новых методов pushState() и replaceState() в интерфейсе истории HTML5.
    • Требуется поддержка фоновой конфигурации. Если сервер не отвечает на ресурс при обновлении, будет отображаться ошибка 404.
10. vue-router реализует ленивую загрузку маршрутов (динамически загружаемые маршруты)
  • Компоненты, соответствующие разным маршрутам, делятся на разные блоки кода, а затем соответствующие компоненты загружаются при доступе к маршруту, что является ленивой загрузкой маршрута, что может ускорить скорость загрузки проекта и повысить эффективность.
const router = new VueRouter({
  routes: [
    {
      path: '/home',
      name: 'Home',
      component:() = import('../views/home')
		}
  ]
})

Вышеизложенное представляет собой резюме, составленное со ссылкой на публикации многих сверстников и официальные документы.Если что-то не так, пожалуйста, укажите.Наконец, спасибо за просмотр, ставьте лайки, делитесь, комментируйте и вознаграждайте~~