VueRouter 기본 검토

한눈에 보는 하이라이트

여기에 사진 설명 삽입

마인드 맵 링크 : https://www.processon.com/view/link/602f374e6376891d5f86f8d1

VueRouter의 기본 사용

HTML
1. 라우팅 구성 요소에 대한 자리 표시 자 만들기

<!-- 路由匹配到的组件将渲染在这里 -->
<router-view>

2. 링크 만들기

<!-- 通过传入 `to` 属性指定链接 -->
<router-link to="/foo">Go to Foo</router-link>
<router-link to="/bar">Go to Bar</router-link>

JS
1. 소개

import Vue from "vue"
import VueRouter from "vue-router"

2. 라우팅 플러그인 등록

Vue.use(VueRouter)

3. 라우팅 규칙 정의

const routes = [
	{
    
    
		path:"/",
		name:"index",
		component: Index
	}
]

4. 라우팅 개체 만들기

const router = new VueRouter({
    
    
	routes
})

5. Vue 인스턴스에 라우터 개체 등록

new Vue({
    
    
  router,
  render: h => h(App)
}).$mount("#app")

라우터를 삽입 한 후 this.$router액세스 라우터의 구성 요소를 this.$route통해 현재 경로에 액세스 할 수도 있습니다.


$ 라우터

라우터 인 vueRouter 인스턴스는 Vue 루트 인스턴스의 라우터 구성을 통해 전달됩니다.

소품

속성 유형 기술
인스턴스보기 라우터가 구성된 Vue 루트 인스턴스
방법 경로에서 사용하는 모드
currentRoute 노선 현재 경로 (예 : $ route)에 해당하는 라우팅 정보 개체
START_LOCATION 노선 라우팅 개체의 형식, 즉 라우팅이 시작되는 위치로 초기 라우팅 주소를 표시합니다. 내비게이션 가드에서 초기 내비게이션 구분에 사용

행동 양식

방법 기술 비고
beforeEach
beforeResolve
afterEach
푸시
바꾸다
가다
앞으로
getMatchedComponents
결의
addRoutes
addRoute
addRoute
getRoutes
onReady
onError

$ route

현재 경로 개체는 현재 활성화 된 경로의 상태 정보를 나타냅니다. 변경할 수 없으며 탐색이 성공할 때마다 새 개체가 생성됩니다.

소품

속성 유형 기술
통로 현재 경로에 해당하는 경로는 항상 " /foo/bar" 와 같은 절대 경로로 확인됩니다.
매개 변수 목적 동적 조각 및 완전 일치 조각을 포함하는 키 / 값 개체입니다. 예 : 패턴 /user/:username, 일치하는 경로 /user/evan,$route.params ={ username: 'evan' }
질문 목적 URL 쿼리 매개 변수를 나타내는 키 / 값 개체입니다. 예를 들어 경로 /foo?user=1의 경우$route.query.user == 1
해시시 현재 경로의 해시 값 (# 포함)
fullPath 쿼리 매개 변수 및 해시의 전체 경로를 포함한 구문 분석 된 URL
일치 정렬 현재 경로의 모든 중첩 경로 조각의 라우팅 레코드를 포함하는 배열
이름 현재 경로의 이름
redirectedFrom 리디렉션이있는 경우 리디렉션이 시작된 경로의 이름입니다.

동적 라우팅

사용하다

특정 패턴과 일치하는 모든 경로는 모두 동일한 구성 요소에 매핑됩니다. 예를 들어, 상품 상세 페이지는 상세 구성 요소를 사용합니다.

const router = new VueRouter({
    
    
  routes: [
    // 动态路径参数 以冒号开头
    {
    
     
    	path: '/detail/:id', 
    	component: Detail
    }
  ]
})

경로 매개 변수 가져 오기

  • $route.params인수를 통해 직접 . "경로 인수"콜론 :표시. 경로가 일치하면 매개 변수 값이 this. $ route.params로 설정되며 각 구성 요소에서 사용할 수 있습니다.
방법 일치 경로 $ route.params
/ user / : 사용자 이름 / user / evan {사용자 이름 : 'evan'}
/ user / : username / post / : post_id / user / evan / post / 123 {사용자 이름 : 'evan', post_id : '123'}
  • 소품을 통해받습니다. 라우팅 구성에서 설정해야합니다.props:true
const router = new VueRouter({
    
    
  routes: [
    {
    
     
    	path: '/detail/:id', 
    	component: Detail,
    	props: true //通过props把参数传递给组件
    }
  ]
})

라우팅 매개 변수 변경에 응답

注意!当使用路由参数时,例如从 /user/foo 导航到 /user/bar,原来的组件实例会被复用。这意味着组件的生命周期钩子不会再被调用
需要对路由参数的变化作出响应,可以通过以下两种方式:

1. watch (监测变化) $route 对象

const User = {
    
    
  template: '...',
  watch: {
    
    
    $route(to, from) {
    
    
      // 对路由变化作出响应...
    }
  }
}

2. 使用 beforeRouteUpdate 进行导航守卫

const User = {
    
    
  template: '...',
  beforeRouteUpdate (to, from, next) {
    
    
      // 对路由变化作出响应...
      // 记得要调用 next()
  }
}

路由嵌套

需要进行路由嵌套,在路由规则中使用 children 配置即可:

const router = new VueRouter({
    
    
  routes: [
    {
    
     path: '/user/:id', component: User,
      children: [
        {
    
    
          // 当 /user/:id/profile 匹配成功,UserProfile 会被渲染在 User 的 <router-view> 中
          path: 'profile',
          component: UserProfile
        },
        {
    
    
          // 当 /user/:id/posts 匹配成功,UserPosts 会被渲染在 User 的 <router-view> 中
          path: 'posts',
          component: UserPosts
        },
        {
    
     
	        // 提供一个【空的】子路由,当 /user/:id 匹配成功,UserHome 会被渲染在 User 的 <router-view> 中
	        // 如果没有提供这个空的子路由,User 的出口不会渲染任何东西。
        	path: '', 
        	component: UserHome
        }
      ]
    }
  ]
})

编程式导航

  • router.push
  • router.replace
  • router.go

router.push(location, onComplete?, onAbort?)

参数可以是一个字符串路径,或者一个描述地址的对象

// 字符串
router.push('home')

// 对象
router.push({
    
     path: 'home' })

// 命名的路由(可以使用 name 而不用 path)
router.push({
    
     name: 'user'}) 

// 命名的路由,带参数
router.push({
    
     name: 'user', params: {
    
     userId: '123' }})  // => /user/123 

// 带查询参数
router.push({
    
     path: 'register', query: {
    
     plan: 'private' }}) // => /register?plan=private

注意:如果提供了 path,params 会被忽略。

const userId = '123'

// name + params
router.push({
    
     name: 'user', params: {
    
     userId }}) // -> /user/123

// 带有手写参数的 path
router.push({
    
     path: `/user/${
      
      userId}` }) // -> /user/123

// 错误使用:这里的 params 不生效
router.push({
    
     path: '/user', params: {
    
     userId }}) // -> /user 

router.replace(location, onComplete?, onAbort?)

router.push 基本相同,唯一的不同就是,它不会向 history 添加新记录,而是替换当前记录。

router.go(n)

参数是一个整数,意思是在 history 记录中向前或者后退多少步。类似 window.history.go(n)


VueRouter 路由守卫

1)全局级别

前置守卫:beforeEach

解析守卫:beforeResolve

导航被确认之前,同时在所有组件内守卫和异步路由组件被解析之后调用

后置钩子:afterEach

不会接受 next 函数也不会改变导航本身。

2)路由级别

前置守卫:beforeEnter

在路由规则中给特定路由进行配置。

 const router = new VueRouter({
    
    
  routes: [
    {
    
    
      path: '/foo',
      component: Foo,
      beforeEnter: (to, from, next) => {
    
    
        // ...
      }
    }
  ]
})

3)组件级别

beforeRouteEnter

구성 요소 인스턴스가 생성되지 않았으며 구성 요소 인스턴스를 가져올 수 없습니다 this. 하지만 다음번 콜백을 통해 컴포넌트 인스턴스를 얻을 수 있습니다. (내비게이션이 확인되면 콜백이 실행되고, 컴포넌트 인스턴스는 콜백 메소드의 매개 변수로 사용됩니다. beforeRouteEnter 만 콜백 전달을 지원합니다.)

beforeRouteEnter (to, from, next) {
    
    
  next(vm => {
    
    
    // 通过 `vm` 访问组件实例
  })
}

beforeRouteUpdate

현재 경로가 변경되었지만 구성 요소가 재사용 될 때 호출됩니다.

beforeRouteLeave

탐색이 구성 요소의 해당 경로를 벗어날 때 호출되며 현재 구성 요소 인스턴스를 계속 가져올 수 있습니다. this

4) 매개 변수 분석

router.***((to, from, next) => { ...})

  • to : 경로, 입력 할 대상 경로 개체
  • from : 라우터, 현재 내비게이션이 나가려는 경로
  • 다음 : 함수,이 메서드를 호출하여이 후크를 해결합니다.

추천

출처blog.csdn.net/lychee_xiahua/article/details/113532292