получить доступ к последним свойствам ввода в ngOnChanges - PullRequest
0 голосов
/ 08 ноября 2019

Официальные документы Angular гласят:

"ngOnChanges - это ловушка жизненного цикла, которая вызывается при изменении любого привязанного к данным свойства директивы. Определите метод ngOnChanges () для обработки изменений.

Немного непонятно, что означает, что обновленное / последнее свойство ввода действительно доступно в методе жизненного цикла ngOnChanges, поэтому я провел простой эксперимент:

//trmplate.html
<p [mydirective] = "GetFirstStudent().Name"></p>

, где Name - это свойство компонента, и я установил имя первого человека как «Майкл».

так в классе директивы как селектор mydirective:

@Directive({
    selector: "[mydirective]"
})
export class CustomDirective{
   ...
    @Input("mydirective")
    personName: string;

    ngOnChanges() {
       console.log(personName);
    }
}

, поэтому я обновляю браузер, иконсоль имеет следующий вывод:

Майкл

Итак, это подтвердило, что в ngOnChanges я могу получить доступ к последним свойствам ввода.

Это мое пониманиеправильно?

Ответы [ 3 ]

1 голос
/ 08 ноября 2019

Ваша реализация работает хорошо для строк и целых чисел, потому что они передаются по значению, но не для входных данных массивов и объектов, потому что они передаются по ссылке

Аргумент SimpleChanges используется для получения новых и предыдущих значений входных свойств

ngOnChanges(changes: SimpleChanges) {
 for (let propName in changes) {  
  let change = changes[propName];
  let curVal  = change.currentValue;
  let prevVal = change.previousValue;
  console.log(curVal);
  console.log(prevVal);
 }
}
1 голос
/ 08 ноября 2019

Вы можете найти рабочий пример здесь StackBlitz Link

ngOnChanges(change: SimpleChanges){
  console.log(change['valueFromParent']);
  if (change['valueFromParent'].currentValue === undefined ){
    this.currentStatus = 'Not Change Detected';
  }
 else if(change['valueFromParent'].currentValue === true){
   this.currentStatus = change['valueFromParent'].currentValue
 }
 else if( change['valueFromParent'].currentValue === false) {
   this.currentStatus = change['valueFromParent'].currentValue
 }
}
0 голосов
/ 08 ноября 2019

Как это:

ngOnChanges(changes: SimpleChanges) {
   console.log(changes.personName);
   if (changes.personName)
   console.log(changes.personName.currentValue)
}
...