河畔的风

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  62 随笔 :: 0 文章 :: 0 评论 :: 15362 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

在进页面前可能需要初始化一些请求数据,用于后续的数据请求

传统的做法是在mounted中嵌套请求方法来请求数据

在vue3 中

我们可以使用 beforeRouteEnter

<script lang="ts">
export default {
  async beforeRouteEnter(to: any, from: any, next) {
    console.log(111);
   
    await new Promise((resolve, reject) => {
      setTimeout(() => {
        console.log(222);
        next(vm => {
    //vm是当前组件对象 如果想要使用组件中的方法可以通过defineExpose来抛出方法、
    //意思就是不仅可以获取到方法  还可以修改ref初始数据
    //也可以在此更改vuex或者pinia 的数据 用于后续的请求
          console.log(vm);
        })
        resolve(true)
      }, 2000);
    })
     console.log("beforeRouteEnter",to ,from)
   }
}
</script>
在一个 .vue文件中写两个script 第一个中就是上面这个beforeenter方法用于请求初始化数据
下面再写一个script标签用于当前组件正常工作。
原因是因为SFC这种写法中并没有将beforeRouteEnter暴露出来
以上是第一种方法
 
第二种方法是
 {
            path: '/book',
            name: ’BOOK‘,
    component: () => import('@/pages/book/index.vue')
            beforeEnter: async (to, from) => {
                //进入book的时候需要拿到书的type并剔除几种数据的类型用于初始化查数据
                return await getBookType()
            },
        },
这种是在路由入口的地方做拦截,在请求完成后可以更新vuex或者pinia来初始化页面接口的请求入参,不过官方没有推荐这张做法,请参考
https://router.vuejs.org/zh/guide/advanced/data-fetching.html
个人比较推荐第二种,可以将每个模块的数据初始化请求接口都写到一起,调用看起来比较整齐,不会显得特别的乱
 
 
 vue3以本人目前浅薄的学识来看是比较喜欢的前端框架,相较于react 18.3 ,个人使用感觉更加完善、更加简单。
 
 
 

 

posted on   河畔的风  阅读(199)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示