请求的接口数据如何跨文件接收

来源:2-21 【讨论题】对 Typescript 初步学习后的印象和困惑

小斌先生

2021-08-10

我有强迫症,纯属是给自己找虐。写的代码就想规规矩矩整整齐齐。一个文件里不想放太多代码。所以遇见了下面的问题。
看完教程后自己尝试做项目,我把接口给拆分出来了。在setup文件里调用了我的接口文件。接口文件里是这么写的,我需要在请求code值是200的时候就设置路由跳转到Home页面。但是我在这个文件里写完以后。控制台会报错,提示router没有push属性。打印router显示undefined,然而我在setup函数里调用路由是有值的,难道是因为我把文件拆分出来导致的吗?那这种问题有没有合适的解决办法呢?请教老师答疑解惑。
另外老师如果我不改动我的文件结构的情况下,在这个接口文件里如何能够将接口的值传回给页面呢?
在vue2的时候可以通过this指向去修改data数据。
在vu3里我想到了用vuex,但用vuex的话,后期可能会导致vux里的数据特别特别多。除了vuex还有别的办法实现跨文件去修改data数据吗?

/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
import { LOGIN } from '@/aips/interface'
import useLogicVerificationCode from './logicVerificationCode'
import { useRouter } from 'vue-router'

interface objFormData {
  valueData: string
}

const useRtieLogin = async (formData: objFormData) => { // 登录接口函数
  const result = await LOGIN(formData)
  const res = result.data
  switch (res.code) {
    case '200': {
      const data = res.data
      sessionStorage.setItem('token', data.token) // 存储token
      const router = useRouter()
      console.log(useRouter())
      router.push({ path: 'Home' })
      break
    }
  }
}
export { useRtieLogin }

写回答

1回答

张轩

2021-08-10

同学你好 

强迫症非常好 写代码必须要有强迫症 

这里的问题在于 特别注意vue-router 和 vuex 钩子函数必须在 setup 中调用才有意义,如果在别的地方调用 router 就会是 undenfined,我估计你是没有在 setup 中调用了这个函数,将 useRiteLogin 修改为 Promise 并且返回特点的状态值(不添加跳转等逻辑,这样其实更符合逻辑和界面分离的函数设计思想)。然后在setup 中再实现 useRiteLogin 调用后的特定逻辑跳转。

第二个问题 直接将这个方法返回 Promise 包含特点的数据不可以吗?

0
1
小斌先生
非常感谢!我已经钻牛角尖了,经过老师的指点,才想到还有个Promise可以使用
2021-08-10
共1条回复

Vue3 + TS 仿知乎专栏企业级项目

带你完成前后端分离复杂项目,率先掌握 vue3 造轮子技能

3142 学习 · 2313 问题

查看课程