【问题标题】:Get simple string array from Angular 11 observables从 Angular 11 observables 获取简单的字符串数组
【发布时间】:2021-05-01 03:41:31
【问题描述】:

我正在尝试从 Angular 中的 GET 调用中获取简单的字符串数组。我需要这个数组来匹配代码中的目的。我不需要通过 *ngFor 将它暴露给 DOM。

目前我得到了

[]
0: (4) ["a", "b", "c", "d"]
length: 1
__proto__: Array(0)

使用此代码:

projects: string[] = [];

this.http.get(`${this.baseUrl}`)
      .pipe(
        map((data: any) => data.response.body
          .map(item => {
              return item.shortName;
            }
          )
        )
      ).subscribe((project: any) => {

      this.projects.push(project);
    });

问题是获取列表的第一个元素:

this.projects[0] = 未定义

字符串数组的手动推送

const proje = ['a', 'b', 'c', 'd']; 由

this.projects.push(proje);

返回:

[Array(4)]
0: (4) ["a", "b", "c", "d"]
length: 1
__proto__: Array(0)

那绝对没问题 this.projects[0] = ['a', 'b', 'c', 'd']。

任何想法将不胜感激。谢谢

【问题讨论】:

  • 您在代码中的哪个位置尝试 this.projects[0] = undefined?这可能只是一个异步的事情..

标签: arrays angular observable


【解决方案1】:

这是一个异步调用。 JavaScript 不会等待它完成并继续执行下一行代码。如果您在此调用之后直接console.log(),您将始终看到一个未定义的数组,因为它会在很久以后才被填充。

this.http.get(`${this.baseUrl}`)
  .pipe(
    map((data: any) => data.response.body
      .map(item => {
          return item.shortName;
        }
      )
    )
  ).subscribe((project: any) => {

  this.projects.push(project);

  // have a look here
  console.log(this.projects);
});

【讨论】:

  • 对,但对我来说还不够。我需要将该数组放入变量中,以便在自定义输入字段验证器中使用以防止重复输入。
  • 你尝试过异步验证器吗?
  • 不,如果它符合我的需要,会看看这个。
  • 据我了解异步验证器,它会在用户输入字段的每次更改时调用一些 api,resp.select 查询从 db 获取输入的值。它返回在专用字段上评估的布尔值以进行匹配。似乎这可能会对应用程序性能产生相当大的影响。我对吗?我宁愿在组件初始化时只调用一次 api 并针对这个检索到的列表验证输入更改。
  • 我实现了异步验证器,除了一件事外,它工作得很好。它不显示错误消息,因为错误为列表:{0: {…}} 0: {duplicateShortName: true}。同步验证器看起来直接像 {minlength: {…}} minlength: actualLength: 1 requiredLength: 3
猜你喜欢
  • 2018-12-24
  • 1970-01-01
  • 1970-01-01
  • 2018-05-31
  • 1970-01-01
  • 1970-01-01
  • 2018-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多