Vue.js의 라우팅 관리자인 Vue Router에 대한 자세한 소개(코드 포함)

不言
풀어 주다: 2018-08-14 17:03:08
원래의
1723명이 탐색했습니다.

이 기사는 Vue.js의 라우팅 관리자 Vue Router에 대한 자세한 소개를 제공합니다(코드 포함). 도움이 필요한 친구들이 참고할 수 있기를 바랍니다. .

준비하세요

HTML

<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>

<div id="app">
  <h1>Hello App!</h1>
  <p>
    <!-- 使用 router-link 组件来导航. -->
    <!-- 通过传入 `to` 属性指定链接. -->
    <!-- <router-link> 默认会被渲染成一个 `<a>` 标签 -->
    <router-link to="/foo">Go to Foo</router-link>
    <router-link to="/bar">Go to Bar</router-link>
  </p>
  <!-- 路由出口 -->
  <!-- 路由匹配到的组件将渲染在这里 n内置组件-->
  <router-view></router-view>
</div>
로그인 후 복사
#🎜 🎜 #JavaScript

// 0. 如果使用模块化机制编程,导入Vue和VueRouter,要调用 Vue.use(VueRouter)

// 1. 定义 (路由) 组件。
// 可以从其他文件 import 进来
const Foo = { template: '<p>foo</p>' }
const Bar = { template: '<p>bar</p>' }

// 2. 定义路由
// 每个路由应该映射一个组件。 其中"component" 可以是
// 通过 Vue.extend() 创建的组件构造器,
// 或者,只是一个组件配置对象。
// 我们晚点再讨论嵌套路由。
const routes = [
  { path: '/foo', component: Foo },
  { path: '/bar', component: Bar }
]

// 3. 创建 router 实例,然后传 `routes` 配置
// 你还可以传别的配置参数, 不过先这么简单着吧。
const router = new VueRouter({
  routes // (缩写) 相当于 routes: routes
})

// 4. 创建和挂载根实例。
// 记得要通过 router 配置参数注入路由,
// 从而让整个应用都有路由功能
const app = new Vue({
  router
}).$mount('#app')

// 现在,应用已经启动了!
로그인 후 복사
라우터를 삽입하면 모든 구성 요소에서 this.$router를 통해 라우터에 액세스할 수 있으며, this.$route:

export default {
  computed: {
    username () {
      // 我们很快就会看到 `params` 是什么
      return this.$route.params.username
    }
  },
  methods: {
    goBack () {
      window.history.length > 1
        ? this.$router.go(-1)
        : this.$router.push('/')
    }
  }
}
로그인 후 복사
를 통해 현재 경로에도 액세스할 수 있습니다. # 🎜🎜#

경로 옵션(배열)

리디렉션(리디렉션)

//此时访问/a会跳转到/b
const router = new VueRouter({
  routes: [
    { path: '/a', redirect: '/b' }
  ]
})
//重定向的目标也可以是一个命名的路由:
const router = new VueRouter({
  routes: [
    { path: '/a', redirect: { name: 'foo' }}
  ]
})
//甚至是一个方法,动态返回重定向目标:
const router = new VueRouter({
  routes: [
    { path: '/a', redirect: to => {
      // 方法接收 目标路由 作为参数
      // return 重定向的 字符串路径/路径对象
    }}
  ]
})
로그인 후 복사

Named Routing

export default [
    {
        path:'/',
        redirect:'/app' //默认跳转路由
    },
    {
        path: '/app',
        //路由命名,可用于跳转
        name: 'app',
    }
]

//可用于跳转
<router-link :to="{name:&#39;app&#39;}">app</router-link>
로그인 후 복사

Routing 메타 정보

정의할 때 메타 필드를 구성할 수 있습니다. 경로: #🎜🎜 #

export default [
    {
        path:'/',
        redirect:'/app' //默认跳转路由
    },
    {
        path: '/app',
        //**相当于HTML的meta标签**
        meta: {
            title: 'this is app',
            description: 'asdasd'
        },
    }
]
로그인 후 복사

중첩 라우팅

export default [
    {
        path:'/',
        redirect:'/app' //默认跳转路由
    },
    {
        path: '/app',
        //子路由 匹配 /app/test
         children: [
           {
             path: 'test',
             component: Login
           }
         ]
    }
]
로그인 후 복사
경로 구성 요소 전달 매개변수

export default [
    {
        path:'/',
        redirect:'/app' //默认跳转路由
    },
    {
        path: '/app/:id', // /app/xxx ,组件内部可以通过$route.params.id拿到这个值
        // 会把:后面的参数通过props传递给组件Todozhong 中
        //布尔模式
        props: true,
        //对象模式
        props:{id:456}
        //函数模式
        props: (route) => ({ id: route.query.b }),
        component: Todo,

    }
]
로그인 후 복사
#🎜 🎜##🎜🎜 #mode 옵션(문자열)

vue-router 기본 해시 모드 - URL의 해시를 사용하여 전체 URL을 시뮬레이션합니다. 따라서 URL이 변경되면 페이지가 다시 로드되지 않습니다. 보기 흉한 해시를 원하지 않는다면, History.pushState API를 최대한 활용하여 페이지를 다시 로드하지 않고도 URL 점프를 완료할 수 있는 라우팅 기록 모드를 사용할 수 있습니다.

const router = new VueRouter({
  mode: 'history',
  routes: [...]
})
로그인 후 복사
이 모드를 잘 플레이하려면 백그라운드 구성 지원도 필요합니다.

base(string)

응용 프로그램의 기본 경로입니다. 예를 들어 전체 단일 페이지 애플리케이션이 /app/ 아래에 제공되는 경우 base는 "/app/"

return new Router({
    routes,
    mode: 'history',//默认使用hash#
    base: '/base/', //在path前面都会加上/base/,基路径
  })
로그인 후 복사

linkActiveClass(string)#으로 설정되어야 합니다. 🎜🎜#

기본값: "router-link-active" 전역 구성 의 기본 "활성화 클래스 이름"입니다.

return new Router({
    routes,
    mode: 'history',//默认使用hash#
    base: '/base/', //在path前面都会加上/base/,基路径
    // 点击calss名字
    linkActiveClass: 'active-link', //匹配到其中一个子集
    linkExactActiveClass: 'exact-active-link',//完全匹配
  })
로그인 후 복사

linkExactActiveClass(string)

기본값: "router-link-exact-active"# 🎜🎜#전역 구성 <라우터 링크>는 기본 클래스를 정확하게 활성화합니다.

scrollBehavior(Function)

라우팅 점프 후 스크롤 여부

export default () => {
  return new Router({
    routes,
    mode: 'history',//默认使用hash#
    base: '/base/', //在path前面都会加上/base/,基路径
    //页面跳转是否需要滚动
    /*
        to:去向路由,完整路由对象
        from:来源路由
        savedPosition:保存的滚动位置
    */
    scrollBehavior (to, from, savedPosition) {
      if (savedPosition) {
        return savedPosition
      } else {
        return { x: 0, y: 0 }
      }
    },
  })
}
로그인 후 복사
#🎜🎜 #parseQuery / stringifyQuery(함수)
/每次import都会创建一个router,避免每次都是同一个router
export default () => {
  return new Router({
    routes,
    mode: 'history',//默认使用hash#
    base: '/base/', //在path前面都会加上/base/,基路径
    // 路由后面的参数?a=2&b=3,string->object
     parseQuery (query) {

     },
      //object->string
    stringifyQuery (obj) {

     }
  })
}
로그인 후 복사

fallback(boolean)#🎜 🎜# 브라우저가 History.pushState를 지원하지 않는 경우 라우팅이 해시 모드로 돌아가야 하는지 여부를 제어합니다. 기본값은 true입니다. false로 설정하면 점프 후 페이지가 새로 고쳐지며 이는 다중 페이지 애플리케이션과 동일합니다

# 🎜🎜#Transition animation

은 기본 동적 구성요소이므로 구성요소를 사용하여 일부 전환 효과를 추가할 수 있습니다. #🎜🎜 #
<transition>
  <router-view></router-view>
</transition>
로그인 후 복사

# 🎜🎜#
고급 사용

명명된 뷰

<router-view class="view one"></router-view>
<router-view class="view two" name="a"></router-view>
<router-view class="view three" name="b"></router-view>

const router = new VueRouter({
  routes: [
    {
      path: '/',
      components: {
      //默认组件
        default: Foo,
        //命名组件
        a: Bar,
        b: Baz
      }
    }
  ]
})
로그인 후 복사
#🎜 🎜 #

Navigation Guard

Global Guard

import Vue from 'vue'
import VueRouter from 'vue-router'

import App from './app.vue'

import './assets/styles/global.styl'
// const root = document.createElement('p')
// document.body.appendChild(root)
import createRouter from './config/router'
Vue.use(VueRouter)

const router = createRouter()

// 全局导航守卫(钩子)

// 验证一些用户是否登录
router.beforeEach((to, from, next) => {
    console.log('before each invoked')
    next()
//   if (to.fullPath === '/app') {
//     next({ path: '/login' })
//     console.log('to.fullPath :'+to.fullPath )

//   } else {
//     next()
//   }
})

router.beforeResolve((to, from, next) => {
    console.log('before resolve invoked')
    next()
})

// 每次跳转后触发
router.afterEach((to, from) => {
    console.log('after each invoked')
})

new Vue({
    router,
    render: (h) => h(App)
}).$mount("#root")
로그인 후 복사
Routing Exclusive Guard

beforeEnter 가드는 라우팅 구성:

export default [
    {
        path:'/',
        redirect:'/app' //默认跳转路由
    },
    {
  
        path: '/app',
        // 路由独享的守卫钩子
        beforeEnter(to, from, next) {
            console.log('app route before enter')
            next()
        }
        component: Todo,
    }
]
로그인 후 복사
컴포넌트 내 가드
export default {
  //进来之前
  beforeRouteEnter(to, from, next) {
    // 不!能!获取组件实例 `this`
    // 因为当守卫执行前,组件实例还没被创建
    console.log("todo before enter", this); //todo before enter undefined
    //可以通过传一个回调给 next来访问组件实例。在导航被确认的时候执行回调,并且把组件实例作为回调方法的参数。
    next(vm => {
        // 通过 `vm` 访问组件实例
      console.log("after enter vm.id is ", vm.id);
    });
  },
  //更新的时候
  beforeRouteUpdate(to, from, next) {
    console.log("todo update enter");
    next();
  },
  // 路由离开
  beforeRouteLeave(to, from, next) {
    console.log("todo leave enter");
    const answer = window.confirm('Do you really want to leave? you have unsaved changes!')
      if (answer) {
        next()
      } else {
        //以通过 next(false) 来取消。
        next(false)
      }
  },
  props:['id'],
  components: {
    Item,
    Tabs
  },
  mounted() {
    console.log(this.id)
  },
};
로그인 후 복사
관련 권장 사항:

Vue의 반응형 데이터에 대한 간략한 소개(그림 및 텍스트)

# 🎜🎜#

vue.js 구성 요소의 전역 등록 및 로컬 등록에 대한 간략한 소개 및 예시 분석

위 내용은 Vue.js의 라우팅 관리자인 Vue Router에 대한 자세한 소개(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿