我有一个组件,我想在其中加载从后端接收的对象.

ngOnInit() {
        this.source.load(this.myService.findAll());
    }

在myService中,我使用Axios从后端获取数据.我可以看到数据到达了前台

public findAll(): any {
        axios.get('http://localhost:8080/api/getAll')
            .then(function (response) {
                console.log(response.data);
            })
            .catch(function (error) {
                console.log(error);
            })
    }

如何从组件调用服务,以便接收对象数组?

推荐答案

NgOnInit不是异步的,因此您必须以一种即发即忘的方式调用您的方法.以下是使用FETCH的答案,因为我不熟悉AXIOS,但它可能很相似. 您没有说您确切期望的是哪个array.如果你知道,你可以用Promise<MyObject[]>来代替Promise<any>.您可能需要在.json()之后添加as MyObject[]

// angular component
ngOnInit() {
  (async () => {
    const data = await this.myService.findAll();
    this.source.load(data);
  })();
}

// MyService class
public async findAll(): Promise<any> {
  try {
    const response = await fetch('http://localhost:8080/api/getAll');
    if(!response.ok) {
      throw new Error("failed to fetch");      
    }

    return await response.json();
  } catch (error) {
    throw new Error("failed to fetch");
  }
}

Typescript相关问答推荐

动态判断TypScript对象是否具有不带自定义类型保护的键

输入元素是类型变体的对象数组的正确方法是什么?'

在映射类型中用作索引时,TypeScrip泛型类型参数无法正常工作

使用axios在ngOnInit中初始化列表

是否可以基于对象的S属性值[]约束对象的其他属性值用于类型化的对象数组?

函数重载中的不正确TS建议

是否可以判断某个类型是否已合并为内部类型?

我在Angular 17中的environment.ts文件中得到了一个属性端点错误

专用路由组件不能从挂钩推断类型

为什么S struct 类型化(即鸭子类型化)需要非严格类型联合?

在Cypress中,是否可以在不标识错误的情况下对元素调用.Click()方法?

声明遵循映射类型的接口

VITEST警告:当前的测试运行器不支持After Each/teardown挂钩

在对象数组中设置值

TypeScript是否不知道其他函数内部的类型判断?

如何使用 Angular 确定给定值是否与应用程序中特定单选按钮的值匹配?

TS 排除带点符号的键

将对象数组传递给 Typescript 中的导入函数

在 TypeScript 中实现类型级别深度优先搜索

如何从 Select 元素中删除选项