Appearance
scrollBehavior
滚动行为
返回一个滚动到的 位置
js
function scrollBehavior(to, from, savedPosition) {
// return 'position'
}
// 滚动到顶部,平滑滚动
function toTop() {
return {
top: 0,
behavior: 'smooth'
}
}
// 传入DOM元素
function toDOM() {
return {
el: '#main',
top: -10
}
}
// 滚动到上次位置
function toSaved(to, from, savedPosition) {
if (savedPosition) {
return savedPostion
} else {
return { top: 0 }
}
}
// 滚动到锚点
function toAnchor(to, from) {
if (to.hash) {
return {
el: to.hash
}
}
}
// 3.x
function router3(to, from, savedPositon) {
if (savedPosition) {
return savedPosition
} else if (to.hash) {
return { selector: to.hash }
} else {
return { x: 0, y: 0 }
}
}
路由守卫
全局前置守卫
js
router.beforeEach((to, from, next) => {
if (to.name !== 'Login' && !isAuthenticated) next({ name: 'Login' })
else next()
})
全局后置守卫
js
router.afterEach((to, from) => {
document.title = to.meta.title
})
懒加载
打包时 JS 过大,会影响页面加载。将不同路由对应的组件分割成不同的代码块,当路由被访问时才加载对应组件,这样就会更加高效。
动态导入就是懒加载
js
// 静态导入
import Home from '@/views/Home.vue'
// 动态导入
const Home = () => import('@/views/Home.vue')
路由分块
将指定路由打包的一个异步块(chunk)中
webpack
js
const UserDetails = () => import(/* webpackChunkName: "group-user" */ './UserDetails.vue')
const UserDashboard = () => import(/* webpackChunkName: "group-user" */ './UserDashboard.vue')
const UserProfileEdit = () => import(/* webpackChunkName: "group-user" */ './UserProfileEdit.vue')
Vite
js
// vite.config.js
export default defineConfig({
build: {
rollupOptions: {
// https://rollupjs.org/guide/en/#outputmanualchunks
output: {
manualChunks: {
'group-user': [
'./src/UserDetails',
'./src/UserDashboard',
'./src/UserProfileEdit',
],
},
},
},
})