宿主选择 网站建设,简航app是什么,免费咨询电脑维修,不写代码做网站目录 安装和配置Vue Router安装Vue Router配置Vue Router Vue Router的基本概念Vue Router 的配置项介绍routes中的配置项介绍 路由跳转使用 router-link组件使用router.push函数 路由传参动态路由嵌套路由命名路由路由守卫全局路由守卫路由独享守卫 路由懒加载使用import()方式… 目录 安装和配置Vue Router安装Vue Router配置Vue Router Vue Router的基本概念Vue Router 的配置项介绍routes中的配置项介绍 路由跳转使用 router-link组件使用router.push函数 路由传参动态路由嵌套路由命名路由路由守卫全局路由守卫路由独享守卫 路由懒加载使用import()方式实现懒加载使用动态import()方式实现懒加载 使用Vue Router的注意事项 Vue Router是一个官方的Vue.js路由管理器它与 Vue.js 核心深度集成通过它可以轻松地为单页应用程序SPA提供路由管理和导航功能。今天我们就来聊一聊Vue 3中使用Vue Router的那些事儿。 安装和配置Vue Router
安装Vue Router
安装Vue Router只需要在vue项目中打开终端输入如下命令即可安装
npm 方式安装
npm install vue-router4yarn方式安装
yarn add vue-router4配置Vue Router
为了便于我们后面代码维护和管理我们一般将路由相关的代码统一放到一个文件夹中。因此配置Vue Router的步骤如下
在src文件夹新建一个router文件夹在该文件夹下新建index.js文件在index.js中引入vue-router中的createRouter 和 createWebHashHistory 方法引入页面文件
import { createRouter,createWebHashHistory } from vue-router;
import Home from ../views/Home.vue
import About from ../views/About.vue
import List from ../views/List.vue
import Detail from ../views/Detail.vue在index.js中定义一个routes数组在里面定义路由规则
const routes [{path:/home,name:Home,component:Home},{path:/about,component:About},{path:/list,component:List},{path:/detail,component:Detail},{path:/,redirect:/home}
]在index.js中使用createRouter创建路由实例并配置路由模式和上面定义的路由规则
const router createRouter({history:createWebHashHistory(),routes
})在index.js的最后使用export default 将上面创建的路由实例导出
export default router注册路由在main.js中导入上面创建的路由文件并使用app.use注册路由
import router from ./router
const app createApp(App)
app.use(router) //注册路由
app.mount(#app)在组件中使用路由组件 在App.vue中使用router-view组件来渲染要显示的组件在Tabbar组件中使用router-link组件生成链接
App.vue组件中代码
templateTitle/Titlerouter-view/router-viewTabbar/Tabbar
/template
script setup
import Tabbar from ./components/Tabbar.vue;
import Title from ./components/Title.vue; /script
style scoped
/styleTabbar组件中代码
templatedivrouter-link to/Home/router-linkrouter-link to/listList/router-linkrouter-link to/aboutAbout/router-link/div/template
script setup
/script
style scoped
div {position: fixed;bottom: 0;width: 100%;height: 50px;line-height: 50px;text-align: center;display: flex;justify-content: space-around;
}
/style至此我们就完成了路由的配置与搭建运行程序刷新浏览器可以看到页面已经可以正常跳转实现了路由功能。
虽然上面我们已经实现了一个完整的路由场景搭建但是我们还是要对Vue Router的基础知识进行深入的了解方便我们更好的理解和使用Vue Router。下面对Vue Router中的一些基本概念进行介绍。
Vue Router的基本概念 路由器Vue Router 提供了一个路由器用于管理应用程序中的路由。Vue Router 实例化一个 Vue Router 对象注册路由规则并以它为中心连接其他组件。 路由路由是分发到不同组件的 URL 地址。在 Vue Router 中路由通常是由 path 规则和相应的组件定义的。当浏览器的 URL 匹配到路由的 path 后相应的组件将会被加载到页面中。路由的信息可以从 route 对象中获取。 路由规则路由规则是由 path、component、name、meta、props 等属性组成的。其中path 表示 URL 的路径component 表示要渲染的组件name 表示路由名称meta 表示路由的元数据props 表示路由 props 数据。路由规则可以注册到 Vue Router 中。 导航守卫导航守卫是在路由跳转时执行的钩子函数用于控制路由的访问权限、处理路由跳转前后的逻辑等。在 Vue Router 中对于选项式 API常用的导航守卫有 beforeRouteEnter、beforeRouteUpdate、beforeRouteLeave 等对于使用组合 API 和 setup 函数来编写组件的可以通过 onBeforeRouteUpdate 和 onBeforeRouteLeave 分别添加 update 和 leave 守卫。
Vue Router 的配置项介绍
我们在使用Vue Router 中的createRouter创建router对象时其为我们提供了很多配置项带完整配置项的示例代码如下
const router createRouter({history: createWebHashHistory(),routes: [],scrollBehavior: () ({ top: 0, left: 0 }),linkActiveClass: active,linkExactActiveClass: exact-active,parseQuery: null,stringifyQuery: null,fallback: true
})上面代码中各个配置项的含义如下 history指定路由的 history 模式目前支持 createWebHistory()和 createWebHashHistory()模式。 routes定义路由规则的数组每一个路由规则都是一个对象包含 path、name、component 和 meta 等属性。 scrollBehavior指定路由切换时滚动行为的配置函数。该函数返回一个包含 x 和 y 属性的对象表示页面跳转后滚动的位置。 linkActiveClass指定激活状态的链接的 class 名称默认为 router-link-active。 linkExactActiveClass指定精确匹配的激活状态的链接的 class 名称默认为 router-link-exact-active。 parseQuery 和 stringifyQuery用于配置路由的查询参数解析和序列化函数。通常情况下我们不需要额外配置这两个函数因为 Vue Router 已经提供了默认的实现。 fallback用于配置是否开启 HTML5 History 模式的回退机制。默认值为 true表示当路由不匹配时将自动回退到历史记录中的上一个路由。
上面的配置项中我们一般只需要配置history和routes两个选项就可以了其它选项了解即可
routes中的配置项介绍
在 Vue Router 中路由规则的配置是通过 routes 属性来实现的。routes 属性中常用的配置如下 name路由规则的名字。可以用于编程式导航和组件内部的路由跳转。 path路由的路径可以包含动态参数和正则表达式。例如/user/:id 表示用户页面:id 是一个动态参数。 redirect路由的重定向规则。例如{ path: /, redirect: /home } 表示路由根路径的重定向。 component路由对应的组件。可以是一个普通的组件类或异步加载的组件。 children当前路由的子路由。可以是一个路由规则数组也可以是一个函数动态生成路由规则。 meta路由的元信息用于描述路由的一些额外信息。例如路由是否需要登录、权限鉴定等。 components路由对应的多个命名视图组件。
路由跳转
通过Vue Router我们可以通过router-link组件的to方法和使用router.push函数以编程方式两种方法导航到路由。
使用 router-link组件
使用router-link组件实现路由跳转我们只需要将菜单按钮使用router-link组件包裹并在上面使用to方法即可进行跳转示例代码如下
divrouter-link to/Home/router-linkrouter-link to/listList/router-linkrouter-link to/aboutAbout/router-link
/div使用router.push函数
使用router.push函数以编程方式实现路由跳转我们只需要在普通按钮上绑定click事件并在事件中调用router.push()方法即可实现跳转示例代码如下:
templatedivrouter-link to/Home/router-linkrouter-link to/listList/router-linkrouter-link to/aboutAbout/router-linkbutton clickgotoAbout 关于 /button/div/template
script setup
import { useRouter } from vue-router
const router useRouter()
const gotoAbout () {router.push(/about)
}
/script使用 router.push 方法会向 history 栈添加一个新的记录所以当用户点击浏览器后退按钮时会回到之前的 URL。
事实上当我们点击 router-link 时Vue Router 内部会调用这个方法所以点击 router-link :to... 相当于调用 router.push(...)
router.push()方法中的参数可以是一个字符串路径或者一个描述地址的对象。
// 字符串路径
router.push(/users/eduardo)// 带有路径的对象
router.push({ path: /users/eduardo })// 命名的路由并加上参数让路由建立 url
router.push({ name: user, params: { username: eduardo } })// 带查询参数结果是 /register?planprivate
router.push({ path: /register, query: { plan: private } })// 带 hash结果是 /about#team
router.push({ path: /about, hash: #team })路由传参
在Vue Router中可以通过以下方式进行路由传参和获取参数
通过路由路径传递参数在路由配置中使用动态路由匹配Dynamic Route Matching例如
const routes [{path: /detail/:id,name: Detail,component: Detail}]在路由路径中使用冒号表示参数参数值会被放入route.params对象中。我们可以通过调用route.params获取参数如访问地址为/detail/123则我们可以通过route.params.id获取值为123。
通过query参数传递参数在路由跳转时使用query参数例如
// 在组件中跳转
router.push({path: /detail,query: { id: 123 }
})// 在模板中跳转
router-link to/detail?id123Detail/router-link在路由中使用query参数时参数值会被放入route.query对象中。我们可以通过route.query获取参数。例如访问地址为/detail?id123则我们可以通过route.query.id获取值为123。
在路由配置中通过props选项传递参数。例如
const routes [{path: /detail/:id,name: Detail,component: Detail,props: { id: 123 }}]在组件中可以直接使用props接收参数
在路由配置中通过meta选项传递参数。例如
const routes [{path: /detail/:id,name: Detail,component: Detail,meta: { id: 123 }}]在组件中可以通过route.meta获取参数
动态路由
动态路由是指将一个路由的一部分作为参数来构建的路由。例如如果我们要为每个用户创建一个单独的页面我们可以使用动态路由创建一个路径为/users/:userId的路由其中:userId是一个参数。
动态路由在定义路由时使用冒号:来表示参数。定义动态路由需要使用path方式定义。例如要定义一个动态路由我们可以这样写
{path: /users/:userId,name: user,component: User
}在上面的代码中路径中的:userId表示一个参数它可以从路由对象的params属性中获取。在组件中可以这样读取userId
console.log(route.params.userId)在使用动态路由时Vue Router还支持使用可选的参数和正则表达式来定义路由。例如可以这样定义一个包含可选参数的动态路由
{path: /users/:userId/:postId?,name: post,component: Post
}在上面的代码中路径中的postId参数是可选的我们在它后面加一个问号代表可选参数。现在如果路径是/users/123那么postId将是undefined如果路径是/users/123/456那么postId将是456。
嵌套路由
嵌套路由允许我们在一个父级路由下嵌套多个子路由从而形成更加复杂的页面结构。
要定义嵌套路由我们可以在父级路由的routes数组中定义一个子路由对象数组每个子路由对象都包含一个path和一个component属性表示当前子路由的访问路径和对应的组件。同时我们还可以在子路由对象中定义子路由的子路由从而形成嵌套的路由结构。
我们使用配置项children表示路由的嵌套关系如下示例代码
const routes [{path: /,component: Home,children: [{path: about,component: About},{path: contact,component: Contact}]}]在上面的代码中我们定义了一个名为Home的组件作为父级路由的组件并在children数组中定义了两个子路由About和Contact。这样当用户访问/about或/contact时Vue Router 就会渲染对应的子组件并将其嵌套在Home组件内。
命名路由
命名路由可以为路由设置一个名称以便在代码中进行引用和跳转。使用命名路由可以让代码更加清晰易懂尤其是在需要跳转到具有动态参数的路由时。
要定义命名路由我们可以在路由对象中使用name属性来指定路由的名称例如
const routes [{path: /,name: home,component: Home},{path: /about,name: about,component: About},{path: /user/:id,name: user,component: User}]在上面的代码中我们为三个路由分别指定了名称home、about和user。然后在代码中我们可以通过这些名称来生成对应的路由链接或路由跳转例如
router-link :to{name: home}Home/router-linkrouter-link :to{name: about}About/router-linkrouter-link :to{name: user, params: {id: 123}}User 123/router-linkrouter.push({name: home})router.push({name: user, params: {id: 456}})在上面的代码中我们分别使用了router-link组件和router.push()方法来跳转到具有命名路由的路由。其中使用params属性可以动态指定路由中的参数。
命名路由在需要动态传递参数的情况下使用非常方便。
路由守卫
路由守卫是一种函数在路由的各个阶段被调用可以用于拦截路由的访问或对路由进行一些操作。我们可以使用路由守卫来控制路由的跳转和访问权限。
在路由守卫中我们通常会用到三个参数to、from和next。 to表示即将要跳转的目标路由对象包含路由的路径、参数和查询字符串等信息。 from表示当前路由对象即正在离开的路由对象。 next是一个函数用于进行路由控制和跳转。当调用next函数时路由会继续向下执行。我们可以通过next函数来控制路由的行为例如渲染组件、跳转路由、取消操作等。
几种使用next函数的情况 next(): 表示继续执行下一个路由守卫。 next(false): 表示取消当前的路由跳转。 next(/path): 表示跳转到指定的路由路径。 next(error): 表示在路由跳转过程中发生了错误例如权限不足等。
需要注意的是在使用路由守卫时我们需要显式地调用next函数来控制路由的跳转和功能否则路由不会继续向下执行。在不同的守卫中next函数的行为和功能也会有所不同需要根据具体的场景进行调用。
Vue Router中的路由守卫分为全局路由守卫和路由独享守卫
全局路由守卫
全局路由守卫是在整个应用中都生效的守卫可以用于拦截所有的路由操作。在Vue Router4中全局守卫有三个beforeEach、beforeResolve和afterEach。 beforeEach: 在路由跳转之前执行可以用于进行全局的访问控制或重定向跳转等操作。 beforeResolve: 在路由跳转完成前执行可以用于等待异步路由组件加载完成或在路由跳转前进行一些操作。 afterEach: 在路由跳转完成后执行可以用于对页面进行一些操作例如监测页面埋点或修改页面标题等。
一个验证用户是否登录的路由守卫示例代码如下
router.beforeEach((to, from, next) {if (to.name ! Login !isAuthenticated) next({ name: Login })else next()
})上面代码中如果用户没有登录则页面跳转到Login页面如果已经登录则执行next()跳转
路由独享守卫
路由独享守卫仅对当前路由生效可以用于限制或增强某个路由的访问权限。在Vue Router4中路由独享守卫有两个beforeEnter和leaveGuard。 beforeEnter: 在进入当前路由之前执行可以用于增强当前路由的访问权限或进行相关操作。 leaveGuard: 在离开当前路由之前执行可以用于给用户提示或进行相关操作。
使用路由守卫时我们可以在createRouter函数中进行注册例如
const routes[{path: /,component: Home},{path: /about,component: About,beforeEnter: (to, from, next) {// 进行路由访问控制或相关操作}}]路由懒加载
路由懒加载是一种将路由组件按需异步加载的方式只有当路由对应的组件需要使用时才会动态地加载该组件对应的代码。使用路由懒加载可以优化应用程序的性能
在Vue Router中使用路由懒加载我们可以通过使用import()和动态import()两种方式来实现
使用import()方式实现懒加载
const Home () import(./views/Home.vue)
const About () import(./views/About.vue)
const routes [{path: /,component: Home},{path: /about,component: About}]
const router createRouter({history: createWebHistory(),routes
})使用动态import()方式实现懒加载
const routes [{path: /,component: () import(./views/Home.vue)},{path: /about,component: () import(./views/About.vue)}
]
const router createRouter({history: createWebHashHistory(),routes
})使用Vue Router的注意事项 动态参数不能有斜杆当使用动态参数时请注意URL不能和动态参数相同。 导航流程:路由类似于栈每次路由的跳转都会被历史纪录中的历史记录所记录。如果你跳转到相同的路由那么历史记录中的最后几次都会被忽略。默认情况下新跳转的路由不会触发路由更新流程你需要显式地使用router.push或者router.replace方法来更新到当前路由。 导航被取消如果你在beforeRouteLeave或beforeRouteUpdate守卫中执行了异步操作则必须确保该异步操作已经完成并调用了next(true)以确保导航可以进行。
OK关于vue3中使用Vue Router的相关内容就聊到这里有问题的小伙伴评论区留言喜欢的小伙伴点赞关注加收藏哦 文章转载自: http://www.morning.jzykw.cn.gov.cn.jzykw.cn http://www.morning.xnhnl.cn.gov.cn.xnhnl.cn http://www.morning.hfnbr.cn.gov.cn.hfnbr.cn http://www.morning.nd-test.com.gov.cn.nd-test.com http://www.morning.mcpdn.cn.gov.cn.mcpdn.cn http://www.morning.qrndh.cn.gov.cn.qrndh.cn http://www.morning.wbqk.cn.gov.cn.wbqk.cn http://www.morning.brzlp.cn.gov.cn.brzlp.cn http://www.morning.cnkrd.cn.gov.cn.cnkrd.cn http://www.morning.wpkr.cn.gov.cn.wpkr.cn http://www.morning.phlrp.cn.gov.cn.phlrp.cn http://www.morning.srkwf.cn.gov.cn.srkwf.cn http://www.morning.fewhope.com.gov.cn.fewhope.com http://www.morning.xknsn.cn.gov.cn.xknsn.cn http://www.morning.gqtzb.cn.gov.cn.gqtzb.cn http://www.morning.rwhlf.cn.gov.cn.rwhlf.cn http://www.morning.xnpj.cn.gov.cn.xnpj.cn http://www.morning.bqmdl.cn.gov.cn.bqmdl.cn http://www.morning.ftdlg.cn.gov.cn.ftdlg.cn http://www.morning.rzpkt.cn.gov.cn.rzpkt.cn http://www.morning.ysnbq.cn.gov.cn.ysnbq.cn http://www.morning.ympcj.cn.gov.cn.ympcj.cn http://www.morning.btblm.cn.gov.cn.btblm.cn http://www.morning.fxzgw.com.gov.cn.fxzgw.com http://www.morning.tdldh.cn.gov.cn.tdldh.cn http://www.morning.rklgm.cn.gov.cn.rklgm.cn http://www.morning.rgsgk.cn.gov.cn.rgsgk.cn http://www.morning.cpljq.cn.gov.cn.cpljq.cn http://www.morning.yybcx.cn.gov.cn.yybcx.cn http://www.morning.hypng.cn.gov.cn.hypng.cn http://www.morning.rykmf.cn.gov.cn.rykmf.cn http://www.morning.lzqdd.cn.gov.cn.lzqdd.cn http://www.morning.tnbas.com.gov.cn.tnbas.com http://www.morning.rqjxc.cn.gov.cn.rqjxc.cn http://www.morning.cwqpl.cn.gov.cn.cwqpl.cn http://www.morning.spwln.cn.gov.cn.spwln.cn http://www.morning.txltb.cn.gov.cn.txltb.cn http://www.morning.rbhqz.cn.gov.cn.rbhqz.cn http://www.morning.bpkqd.cn.gov.cn.bpkqd.cn http://www.morning.clhyj.cn.gov.cn.clhyj.cn http://www.morning.zmnyj.cn.gov.cn.zmnyj.cn http://www.morning.nmfxs.cn.gov.cn.nmfxs.cn http://www.morning.mkpqr.cn.gov.cn.mkpqr.cn http://www.morning.xdxpq.cn.gov.cn.xdxpq.cn http://www.morning.diuchai.com.gov.cn.diuchai.com http://www.morning.hrtct.cn.gov.cn.hrtct.cn http://www.morning.ghslr.cn.gov.cn.ghslr.cn http://www.morning.rqnml.cn.gov.cn.rqnml.cn http://www.morning.mzwqt.cn.gov.cn.mzwqt.cn http://www.morning.qkskm.cn.gov.cn.qkskm.cn http://www.morning.cpkcq.cn.gov.cn.cpkcq.cn http://www.morning.rnhh.cn.gov.cn.rnhh.cn http://www.morning.mnjyf.cn.gov.cn.mnjyf.cn http://www.morning.yydeq.cn.gov.cn.yydeq.cn http://www.morning.tssmk.cn.gov.cn.tssmk.cn http://www.morning.jggr.cn.gov.cn.jggr.cn http://www.morning.nzmw.cn.gov.cn.nzmw.cn http://www.morning.mnjwj.cn.gov.cn.mnjwj.cn http://www.morning.yqrgq.cn.gov.cn.yqrgq.cn http://www.morning.zbhfs.cn.gov.cn.zbhfs.cn http://www.morning.dqgbx.cn.gov.cn.dqgbx.cn http://www.morning.qbzdj.cn.gov.cn.qbzdj.cn http://www.morning.kfcfq.cn.gov.cn.kfcfq.cn http://www.morning.mldrd.cn.gov.cn.mldrd.cn http://www.morning.tslxr.cn.gov.cn.tslxr.cn http://www.morning.hqbnx.cn.gov.cn.hqbnx.cn http://www.morning.wrqw.cn.gov.cn.wrqw.cn http://www.morning.tzrmp.cn.gov.cn.tzrmp.cn http://www.morning.rmxwm.cn.gov.cn.rmxwm.cn http://www.morning.tpfny.cn.gov.cn.tpfny.cn http://www.morning.rmxgk.cn.gov.cn.rmxgk.cn http://www.morning.c7630.cn.gov.cn.c7630.cn http://www.morning.gwjsm.cn.gov.cn.gwjsm.cn http://www.morning.gnlyq.cn.gov.cn.gnlyq.cn http://www.morning.lwrks.cn.gov.cn.lwrks.cn http://www.morning.tnkwj.cn.gov.cn.tnkwj.cn http://www.morning.ktmnq.cn.gov.cn.ktmnq.cn http://www.morning.bhbxd.cn.gov.cn.bhbxd.cn http://www.morning.twdkt.cn.gov.cn.twdkt.cn http://www.morning.qgjxy.cn.gov.cn.qgjxy.cn