【问题标题】:Cannot access value from ngOnChanges SimpleChanges无法从 ngOnChanges SimpleChanges 访问值
【发布时间】:2017-06-19 02:24:06
【问题描述】:

我正在尝试从输入访问组件的数据,并使用 ngOnChanges 来执行此操作,但 VS 代码抱怨我尝试获取的输入不是 SimpleChanges 对象的属性,因此不会不编译。我在这里做错了什么?

@Input('filters') filtersInput;

ngOnChanges(changes: SimpleChanges) {
    console.log(changes);
    this.filters = changes.filtersInput.currentValue;
}

我知道 filtersInput 不是 SimpleChanges 的一部分,但既然是类,它有意义吗?

【问题讨论】:

  • 那么console.log(changes); 里面有什么?
  • 它有一个名为 filtersInput 的属性,但 Harry 的响应如下。我还不明白编译过程:/

标签: angular


【解决方案1】:

这只是一个编译时错误,因为SimpleChanges 的接口没有明确的filtersInput 属性:

export interface SimpleChanges {
    [propName: string]: SimpleChange;
}

您必须改为使用索引器来获取值:

this.filters = changes["filtersInput"].currentValue;

【讨论】:

  • 非常感谢,感谢您的解释。如果我理解正确,因为接口没有明确的属性,就像你提到的那样,不允许将其用作属性,但将其视为索引(我的理解是这在 JS 中是不合适的)是允许的?感觉就像是对行为习惯的奇怪打破,但也许我没有正确考虑它。
  • @RhoVisions Indexer 是让每个人都可以使用它的方法,因为接口/类定义是静态的,但您的需求一直在变化。如果您觉得使用 indexer 不方便,则需要为每个场合创建一个 SimpleChanges 的子类。
  • 我不介意使用索引方法,我只是想确保我了解发生了什么以及为什么。谢谢。
  • 原因是所有的类定义都是静态的。 Angular 团队不能只为世界上的所有组件做出每一个定义(例如,他们无法预见您使用名为 filtersInput 的字段,因此无法将其定义为 SimpleChangesinterface 中的属性)。
猜你喜欢
  • 2018-08-19
  • 1970-01-01
  • 1970-01-01
  • 2015-08-20
  • 1970-01-01
  • 2021-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多