Vue.js中路由管理器 Vue Router的详细介绍(附代码)
本篇文章给大家带来的内容是关于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('/') } } }
routes 选项 (Array)
redirect(重定向 )
//此时访问/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>
路由元信息
定义路由的时候可以配置 meta 字段:
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选项(string)
vue-router 默认 hash 模式 —— 使用 URL 的 hash 来模拟一个完整的 URL,于是当 URL 改变时,页面不会重新加载。
如果不想要很丑的 hash,我们可以用路由的 history 模式,这种模式充分利用 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 (Function)
/每次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 控制路由是否应该回退到 hash 模式。默认值为 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 } } ] })
导航守卫
全局守卫
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")
路由独享的守卫
可以在路由配置上直接定义 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) }, };
相关推荐:
Atas ialah kandungan terperinci Vue.js中路由管理器 Vue Router的详细介绍(附代码). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Apabila menggunakan rangka kerja Vue untuk membangunkan projek bahagian hadapan, kami akan menggunakan berbilang persekitaran apabila digunakan Selalunya nama domain antara muka yang dipanggil oleh pembangunan, ujian dan persekitaran dalam talian adalah berbeza. Bagaimanakah kita boleh membuat perbezaan? Iaitu menggunakan pembolehubah dan corak persekitaran.

Perbezaan antara komponenisasi dan modularisasi: Modularisasi dibahagikan dari perspektif logik kod; ia memudahkan pembangunan berlapis kod dan memastikan bahawa fungsi setiap modul berfungsi adalah konsisten. Pengkomponenan adalah perancangan dari sudut antara muka UI pemkomponenan bahagian hadapan memudahkan penggunaan semula komponen UI.

Ace ialah editor kod boleh terbenam yang ditulis dalam JavaScript. Ia sepadan dengan fungsi dan prestasi penyunting asli seperti Sublime, Vim dan TextMate. Ia boleh dibenamkan dengan mudah ke dalam mana-mana halaman web dan aplikasi JavaScript. Ace dikekalkan sebagai editor utama untuk Cloud9 IDE dan merupakan pengganti kepada projek Mozilla Skywriter (Bespin).

Kata Pengantar: Dalam pembangunan vue3, reaktif menyediakan kaedah untuk melaksanakan data responsif. Ini adalah API yang kerap digunakan dalam pembangunan harian. Dalam artikel ini, penulis akan meneroka mekanisme operasi dalamannya.

Vue.js telah menjadi rangka kerja yang sangat popular dalam pembangunan bahagian hadapan hari ini. Memandangkan Vue.js terus berkembang, ujian unit menjadi semakin penting. Hari ini kita akan meneroka cara menulis ujian unit dalam Vue.js 3 dan menyediakan beberapa amalan terbaik serta masalah dan penyelesaian biasa.

Bagaimana untuk mengendalikan pengecualian dalam komponen dinamik Vue3? Artikel berikut akan membincangkan kaedah pengendalian pengecualian komponen dinamik Vue3 Saya harap ia akan membantu semua orang.

Dalam Vue.js, pembangun boleh menggunakan dua sintaks berbeza untuk mencipta antara muka pengguna: sintaks JSX dan sintaks templat. Kedua-dua sintaks mempunyai kelebihan dan kekurangannya sendiri Mari kita bincangkan perbezaan, kelebihan dan kekurangannya.

Dalam proses projek pembangunan sebenar, kadangkala perlu memuat naik fail yang agak besar, dan kemudian muat naik akan menjadi agak perlahan, jadi latar belakang mungkin memerlukan bahagian hadapan untuk memuat naik hirisan fail Sebagai contoh, 1 A aliran fail gigabait dipotong kepada beberapa aliran fail kecil, dan kemudian antara muka diminta untuk menghantar aliran fail kecil masing-masing.
