【问题标题】:Typescript - Cannot read property 'push' of undefined打字稿 - 无法读取未定义的属性“推送”
【发布时间】:2021-03-16 15:03:55
【问题描述】:

我正在努力将值简单地推送到数组中。这是我的代码:我正在尝试翻译一个 Angular 应用程序,但信息不在 html 中,而是在 ts 文件中。

export class EventReportModalComponent implements OnInit {
  reasons: Array<string>;
  reasonsKeys = [
    'report.reason.nudity',
    'report.reason.hate-speech',
    'report.reason.violence',
    'report.reason.bullying',
    'report.reason.false-information',
    'report.reason.undesirable-content',
    'report.reason.other',
  ];

  constructor(
    private translate: TranslateService
  ) {
    let reasons;
    for (let item of this.reasonsKeys) {
      this.translate.get(item).subscribe(res => {
        reasons.push(res);
      });
    }

    this.reasons = reasons;
  }

  ngOnInit(): void {
  }
}

我有这个错误:

TypeError: 无法读取未定义的属性“push”

我不明白如何在 javascript 中实现这一点。我在哪里做错了?

【问题讨论】:

  • 需要用[]初始化原因:let reasons = []

标签: angular typescript ngx-translate


【解决方案1】:

您的代码中有 2 个问题。

  1. 未定义reasons

您必须先使用空数组初始化 reasons,然后才能将 push 放入其中:
let reasons = [];

  1. 异步函数

this.translate.get 是异步的。因此,当这不是正确的方法时。 您应该改为将项目动态推送到 finaly 对象。

let reasons;
for (let item of this.reasonsKeys) {
  this.translate.get(item).subscribe(res => {
    reasons.push(res);
  });
}

this.reasons = reasons; // reasons is empty, because this.translate.get did not answer yet

为什么不直接推入this.reasons 呢?

【讨论】:

    【解决方案2】:

    用 - 初始化构造函数中的reasons变量

    let reasons = [];
    

    【讨论】:

    • @Random 哎呀!谢谢:)
    【解决方案3】:

    translate.get 接受一个数组,因此您应该能够一次性获得翻译:

    this.translate.get(this.reasonsKeys).subscribe(res => {
      this.reasons = res;
    });
    

    注意:如果您开始使用 ngx-translate,请注意它可能不会进一步开发:https://github.com/ngx-translate/core/issues/783

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-21
      • 1970-01-01
      • 1970-01-01
      • 2021-03-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多