【问题标题】:Angular: Prevent any more inputs from entering Child Component, Turn off Change DetectionAngular:防止更多输入进入子组件,关闭更改检测
【发布时间】:2020-08-19 09:28:24
【问题描述】:

有什么方法可以阻止 Angular Input 接收更多的输入。我希望子输入从 ngOnChanges 接收 3 次更新更改,并在第 4 次或更高时停止接收输入并停止更改值。

我可以在子组件 ngOnChanges 上放置一个输入计数标志,只是想知道在父组件或子组件中是否有更好的机制来停止接收输入?

当前解决方案

ngOnChanges() {
    if (inputCount < 3) { 
       this.customerName = ....
       this.product = ....
} 

【问题讨论】:

  • 感觉就像你在尝试修复一些应该在不同的地方修复的东西。你能解释一下为什么你想要这样的机制吗?我只能想象这最终会让组件的消费者感到困惑
  • 嗨@PoulKruijt 我正在使用以前的人代码,必须重写代码,我想我的问题是如何关闭更改检测?
  • 我认为最好对从组件外部更新值的次数进行去抖动。所以处理父母的变化,而不是孩子

标签: angular typescript angular8 angular-components angular-changedetection


【解决方案1】:

您可以使用 setter/getter 来做到这一点:

@Input() 
get myInput() {return this._myInput;}
set myInput(value: any) {
  if(this._myInputCount >= 3) {
    return;
  }
  this._myInput = value;
  this._myInputCount++;
}
private _myInput: any;
private _myInputCount = 0;

【讨论】:

  • 是的,我的意思是 setter/getter 是 ngOnchages 的替代品,我正在寻找变更检测中的停止机制,我已经有类似的解决方案,无论如何谢谢
  • 恐怕没有更简单的方法可以做到这一点。我必须同意@poul-kruijt,也许还有另一个问题导致您出现这种情况,应该进行审查。
  • 嗨,我正在使用以前的人代码,必须重写代码,我想我的问题是如何关闭更改检测?
  • 哼……这可不是小事。目前,有些人在谈论禁用NgZones(负责触发更改检测),但它会为您的整个应用程序完成。 This other question或许能给你一点线索。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-11
  • 1970-01-01
  • 2015-03-26
  • 1970-01-01
  • 2018-08-11
  • 1970-01-01
  • 2016-12-13
相关资源
最近更新 更多