You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue.js组件调用API时出现TypeError: Cannot read properties of undefined (reading 'getList')错误的解决方法

解决Vue组件调用API时出现的TypeError: Cannot read properties of undefined (reading 'getList')错误

这个错误其实是模块导入导出不匹配导致的,咱们一步步拆解问题:

错误根源

错误提示说Cannot read properties of undefined (reading 'getList'),意味着你代码里的gpbApi.catalogProducts是undefined,自然没法调用它的getList方法。

看一下你的模块关系:

  • 在catalogProducts.js中,你用的是命名导出:export async function getList(...)
  • 但在gpbApi.js中,你用的是默认导入:import catalogProducts from './catalogProducts'

默认导入只会抓取模块的default导出内容,而你的catalogProducts.js并没有设置默认导出,所以这里导入的catalogProducts其实是undefined,最终导致gpbApi.catalogProducts也是undefined。

两种解决方案

方案一:修改catalogProducts.js为默认导出

如果你只需要在catalogProducts.js里导出getList这一个方法,可以把它改成默认导出:

import axios from 'axios';
axios.defaults.baseURL = 'http://localhost/client/';

// 改为默认导出
export default async function getList(entityId) {
  if (entityId == null) return;
  const { data } = await axios.get(`api/getList?id=${entityId}`);
  return data;
}

这种情况下gpbApi.js不需要修改,不过如果后续要给catalogProducts.js新增其他API方法,这种方式就不太方便了。

方案二:修改gpbApi.js的导入方式(更推荐)

如果以后要在catalogProducts.js里扩展更多API方法,推荐用这种方式——适配命名导出的导入逻辑:

// 导入整个模块的所有命名导出
import * as catalogProducts from './catalogProducts';

export default {
  catalogProducts
};

或者也可以单独导入需要的方法再组装:

import { getList } from './catalogProducts';

export default {
  catalogProducts: {
    getList
  }
};

这种方式的好处是,以后你在catalogProducts.js里新增命名导出的方法(比如createProduct、updateProduct),gpbApi.js不需要做任何修改,就能直接通过gpbApi.catalogProducts.createProduct调用,扩展性拉满。

验证修改

调整完代码后,重启你的Vue项目,再触发load方法,就不会再出现这个undefined的错误了,API调用应该能正常执行。

内容的提问来源于stack exchange,提问作者tesicg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 19:19:11