ngOnChanges срабатывает только в первый раз - PullRequest
0 голосов
/ 18 июня 2020

Я беру @Input () из родительского компонента и использую ngOnChanges, чтобы уловить изменение. Но срабатывает только один раз. Он изменяет текущее значение, но предыдущее значение всегда не определено. Вот что я делаю:

myArray=[];
ngOnChanges(changes:SimpleChanges):void{
  console.log(changes);
  if(changes.myInput.currentValue != undefined && changes.myInput.currentValue != changes.myInput.previousValue){
    for(var i=0;i<this.changes.myInput.currentValue.length;i++){
    console.log("length is" , i);
    this.myArray.push(this.changes.myInput.currentValue);
    }
  }
}

Здесь console.log(changes) встречается только один раз. Хотя значение внутри него меняется каждый раз при изменении @Input(). Мой myInput.currentValue - это массив, и я хочу что-то делать каждый раз, когда новый объект помещается в массив через @Input() от родителя. Это не go внутри условия if, и я не могу найти длину.

1 Ответ

1 голос
/ 18 июня 2020

My myInput.currentValue - это массив, и я хочу что-то делать каждый раз, когда новый объект помещается в массив через @Input () от родителя.

И вот причина проблемы. Входное значение (то есть ссылка) технически не меняется - объект изменяется, но ссылка остается прежней - и механизм обнаружения изменений пропускает его. Поэтому вместо того, чтобы делать что-то вроде этого

myArray.push(newValue);

в родительском элементе, сделайте вместо этого

myArray = [...myArray, newValue];
...