이 기사는 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>
// 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') // 现在,应用已经启动了!
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 重定向的 字符串路径/路径对象
}}
]
})
export default [
{
path:'/',
redirect:'/app' //默认跳转路由
},
{
path: '/app',
//路由命名,可用于跳转
name: 'app',
}
]
//可用于跳转
<router-link :to="{name:'app'}">app</router-link>
정의할 때 메타 필드를 구성할 수 있습니다. 경로: #🎜🎜 #
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, } ]
vue-router 기본 해시 모드 - URL의 해시를 사용하여 전체 URL을 시뮬레이션합니다. 따라서 URL이 변경되면 페이지가 다시 로드되지 않습니다. 보기 흉한 해시를 원하지 않는다면, History.pushState API를 최대한 활용하여 페이지를 다시 로드하지 않고도 URL 점프를 완료할 수 있는 라우팅 기록 모드를 사용할 수 있습니다.
const router = new VueRouter({ mode: 'history', routes: [...] })
응용 프로그램의 기본 경로입니다. 예를 들어 전체 단일 페이지 애플리케이션이 /app/ 아래에 제공되는 경우 base는 "/app/"return new Router({
routes,
mode: 'history',//默认使用hash#
base: '/base/', //在path前面都会加上/base/,基路径
})
기본값: "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 } } }, }) }
/每次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> <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 Guardimport 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")
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!