Angular: запретить ввод дополнительных данных в дочерний компонент, отключить обнаружение изменений

Есть ли способ предотвратить получение Angular Input дополнительных входов. Я хочу, чтобы дочерний ввод получил 3 изменения обновления от ngOnChanges, а на 4-м или более позднем этапе перестал получать вводы и перестал изменять значения.

Я мог бы поставить флаг подсчета входных данных на дочерний компонент ngOnChanges, просто любопытно, есть ли какой-либо лучший механизм в родительском или дочернем компоненте, чтобы перестать получать входные данные?

Текущее решение

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

person Community    schedule 04.05.2020    source источник
comment
Такое ощущение, что вы пытаетесь исправить что-то, что нужно исправить в другом месте. Вы можете объяснить, почему вам нужен такой механизм? Я могу только представить, что это в конечном итоге запутает потребителей компонента.   -  person Poul Kruijt    schedule 04.05.2020
comment
привет @PoulKruijt Я работаю с кодом предыдущего человека, мне придется переписать код, я думаю, мой вопрос в том, как отключить обнаружение изменений?   -  person    schedule 04.05.2020
comment
Я думаю, что лучше обсудить, сколько раз значение обновляется извне компонента. Так что обрабатывайте изменения в родительском элементе, а не в дочернем   -  person Poul Kruijt    schedule 05.05.2020


Ответы (1)


Вы можете сделать это с помощью установщика / получателя:

@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;
person julianobrasil    schedule 04.05.2020
comment
да, я имею в виду, что сеттер / получатель - это альтернативы ngOnchages, я ищу механизм остановки при обнаружении изменений, у меня уже есть аналогичное решение, в любом случае спасибо - person ; 04.05.2020
comment
Боюсь, что нет более простого способа сделать это. Я должен согласиться с @ poul-kruijt, возможно, есть другая проблема, которая привела вас к этой ситуации, которую следует рассмотреть. - person julianobrasil; 04.05.2020
comment
привет, я работаю с кодом предыдущего человека, мне придется переписать код, я думаю, мой вопрос в том, как отключить обнаружение изменений? - person ; 04.05.2020
comment
Хм ... это нетривиальная вещь. В настоящее время некоторые ребята говорят об отключении NgZones (который отвечает за активацию обнаружения изменений), но это будет сделано для всего вашего приложения. Этот другой вопрос может дать вам ключ к разгадке. - person julianobrasil; 05.05.2020