【问题标题】:Angular How convert result API with only value to Object with only one primitive typeAngular如何将只有值的结果API转换为只有一种原始类型的对象
【发布时间】:2022-07-12 23:15:44
【问题描述】:

我在后端有很多 api,想要创建前端 Angular,但是 api 如何只返回结果 ["domain1","domain2"],我需要将此 llist String[] 转换为 Domain[],使用

export interface Domain{
    name:string;
}
    this.domainService.getAll().subscribe((data: String[])=>{
      data.forEach((value: String, index: number, array: String[]) => {
        let domain:Domain;
        domain.name = value;
        this.domains.push(domain);
      }
      )    })  
//The variable 'domain' is used before being assigned

【问题讨论】:

  • 你能给出完整的错误信息吗?此外,您分配了domain.name,但域还没有分配给任何东西(您定义了它的类型但它还不是一个对象,所以您会收到类似“无法设置未定义的属性”的错误)。您可以使用以下方式更轻松地转换您的数组:this.domainService.getAll().subscribe((data: string[]) => {return data.map(domain => { return {name: domain}; })}(最好不要订阅,而是使用 map rxjs 运算符)

标签: angular


【解决方案1】:

试试这个:

export interface Domain{
  name: string;
}

this.domainService.getAll().subscribe((data: string[])=>{
  const mappedDomaing: Domain[] = data.map(x => ({name: x}));
  this.domains.push(...mappedDomaing);
})

变化:

  1. 数据:字符串[] => 数据:字符串[]
  2. 不需要循环,你可以使用更花哨的东西,比如.map。代码越少越好

关于你的错误://变量'domain'在被赋值之前被使用

这是由于..确实,domain 需要先初始化,然后才能尝试通过 domain.name 访问其属性。

const domain: Domain = {
  name: value // Not sure about value, value is String and name is string, typescript compiler is not happy about that
};

另外,Angular 在 Observables 方面做得很好,你应该试一试,你填充域数组的方式不是很好,你可以用更少的代码用 Observables、RxJs 和AsyncPipe做更多的事情@

【讨论】:

    【解决方案2】:

    我将字符串更改为字符串并使用它

    data.forEach((value: string, index: number, array: string[]) => {
            let domain:Partial<Domain> = {};
            domain.name = value;
            this.domain.push(domain as Domain);
         }
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-19
      • 1970-01-01
      • 2013-01-12
      • 1970-01-01
      • 1970-01-01
      • 2018-11-06
      • 2015-04-24
      • 1970-01-01
      相关资源
      最近更新 更多