企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[toc] # Vue 路由 ## vue router 中主要提供了几个组件?分别是干什么用的? 答:两个。 router-link :制作一个路由跳转的按钮,比如:<router-link to="/login">登录</router-link> router-view:显示注册的路由页面,比如:<router-view /> ## keep-alive 是干什么用的?怎么用? 答:一个路由在切换时会被销毁,之前的数据全部丢失,下次再访问这个组件时,需要重新创建,重新调接口,重新渲染,我们可以使用 keep-alive 把组件缓存起来,这样在组件切换时,这个组件并没有被销毁,下次访问时,可以就可以显示出来,而且原组件中数据还在。 把需要缓存的组件使用 keep-alive 套起来即可。比如:把所有路由页面都缓存起来,在切换时不销毁: ~~~ <keep-alive> <router-view /> </keep-alive> ~~~ 还可以使用 include 和 exclude 来设置哪些缓存,哪些不缓存,比如:不缓存登录页: ~~~ <keep-alive exclude="login"> <router-view /> </keep-alive> ~~~ ## 如何实现路由跳转? 答: 方式一、router-link 制作按钮 方式二、JS 中使用 this.$router.push(路径) this.$router.back() // 返回上一个页面 this.$router.go(-1) // 返回 上一个页面 ## 如何接收路由参数? 答:路由参数有两种形式:`query` 和 `params`。 形式一 query 、 直接在跳转的地址后面添加 `?`,比如 /users?id=100&page=1 在下个页面中接收使用 `this.$route.query.id` 形式二 params 、 需要先在路由配置中的 path 属性上配置:如:`path: '/users/:id'` 然后在跳转时在路由上添加:比如:`/users/100` 在下个页面中接收使用 `this.$route.params.id` ## 配置一个路由需要几个属性? 答:至少2个:`path` 和 `component` ,其它的还有: path:路径 component:页面组件 name: 路由名称 children:子路由页面 meta:设置其他的信息 ## vue router 中有几个钩子函数(导航守卫)?项目中一般用来干什么用? 答: 导航守卫:一个回调函数,这个函数会在每次路由跳转时执行。 - beforeEach:在每次路由跳转之前执行。 - afterEach:在每次路由跳转完之后执行。 - beforeEnter:写在某一个路由中,当进入这个路由时触发的。 - 组件内守卫:写在组件中的路由,当进入这个组件时才触发。 * `beforeRouteEnter`:当前进入前 * `beforeRouteUpdate`(2.2 新增):路由更新时 * `beforeRouteLeave`:离开这个组件时 - beforeResolve:所有组件解析完,跳转前执行。 基于它的特点,`beforeEach` 中非常适合编写权限功能,比如:必须登录才能进入我的订单页面。可以在每次跳转之前执行 beforeEach 然后在 beforeEach 中判断,如果要进入订单页面必须要先登录。 商城后台项目中使用它来进行权限判断! ## vue router 中的 beforeEach 钩子函数(导航守卫)中有几个参数?分别是干什么用的? 答:三个参数。 to:对象,将要跳转到的路由对象。 from:对象,跳转前的路由对象。 next:函数,用来跳转的函数,在钩子函数中必须要调用这个函数,有三种情况: next():进入下一个页面。 next(false):阻止本次跳转(不跳转)。 next(路径):跳转到这个指定的路径。 示例、比如必须登录才能进入 /main 页面,如果没有登录就跳转到登录页面。 router/index.js ~~~ // 定义一个全局守卫,在每次跳转之前执行 router.beforeEach( (to,from,next)=>{ // 判断是否要去 /main 页面 if(to.path === 'main') { // 判断有没有令牌 if(localStorage.getItem('token') === null) { // 跳转到登录页 next('/login') } else { // 放行 next() } } else { // 直接跳转过去 next() } }) ~~~ ## 如何在一个页面中配置子路由页面? 答: 第一步:在 `router/index.js` 中使用 `children` 属性配置子路由页面 第二步:在页面中添加 `router-view` 组件显示子页面 ## vue router 的路由模式有几种? 两种模式:`hash` 和 `history`。 hash 模式的效果是在 URL 后面添加 `#` ,比如:http://localhost:8080/#/login history 模式的效果没有 # 号,如:http://localhost:8080/login 注意:history 模式的项目在上线部署时,服务器需要额外配置,否则不能在页面中刷新,一刷新就会找不到页面。