【问题标题】:use Angular6 Service constructor to initialize private attribute使用 Angular6 Service 构造函数初始化私有属性
【发布时间】:2020-06-12 15:31:41
【问题描述】:

我正在尝试初始化 Angular6 服务中的一些对象,但我收到一个错误,说明我的私有属性之一未定义。

起初我尝试过:

private mockIncident: Incident[];

constructor() {
    this.mockIncidentRaw.forEach(incident => {
      this.mockIncident.push(new Incident().deserialize(incident))
    });
  }

但我收到错误消息,提示未定义 mockIncident。
ERROR 错误:未捕获(承诺中):TypeError:无法读取未定义的属性“push”。

然后尝试了:

public mockIncident: Incident[];

  constructor() {
    init();
  }
  
  init = () => {
    for(let i = 0; this.mockIncidentRaw.length; i++) {
      this.mockIncident.push(new Incident().deserialize(this.mockIncidentRaw[i]))
    } 
  }

【问题讨论】:

  • 你从来没有给它一个值,只是一个类型,为什么这令人惊讶?
  • 另外,this.mockIncidentRaw是怎么初始化的?我想你的问题还不止我的回复。
  • @jonrsharpe this.mockIncidentRaw 包含该值,但此处不相关
  • @Exomus 唯一的问题是您在答案的第二部分中提到的数组没有初始化
  • 你是对的,这不相关,这不是你想要推动的。

标签: javascript angular angular-services


【解决方案1】:

public mockIncident: Incident[]; 正在声明一个未定义的对象。

这样做public mockIncident: Incident[] = [] 以便进行数组初始化。在这里,您将拥有数组的所有属性,例如 push()

【讨论】:

  • 有关信息 ngOnInit 不适用于服务:“生命周期钩子,如 OnInit() 与指令和组件一起使用。它们不适用于其他类型,例如您的服务。” link,但问题是我没有将数组初始化为[],谢谢
  • 我的错,我读错了你关于你声明的角度组件类型的帖子。我正在更新我的回复,以纠正我非常误导的回答。我道歉
【解决方案2】:

mockIncident数组未初始化,添加=[];

private mockIncident: Incident[] = [];

【讨论】:

    猜你喜欢
    • 2016-11-28
    • 2016-08-17
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-13
    • 2015-09-11
    • 1970-01-01
    相关资源
    最近更新 更多