Angular 应为方法 ngOnChanges 实现生命周期接口 OnChanges

Angular Lifecycle Interface OnChanges should be implemented for method ngOnChanges

Tslint 正在发送一条警告,指示应为方法 ngOnChagnes 生命周期挂钩实施 OnChanges。如果我将 ngOnChanges 更改为 OnChanges,则不会出现警告。

import { Component, Input, OnInit, Output, EventEmitter, SimpleChange, OnChanges } from '@angular/core';

import { Order } from '../../../../core/orders';

import { CartItem } from '../../../../core/orders';
import { User } from '../../../../core/auth/_models/user.model';

declare var $: any;

@Component({
  selector: 'app-order-summary',
  templateUrl: './order-summary.component.html',
  styleUrls: ['./order-summary.component.scss']
})
export class OrderSummaryComponent implements OnInit, OnChanges {
  @Input() cartDetails: Order;
  @Input() sellerDetail: User;
  @Input() productCost: number;
  @Output() closeOrderSummary = new EventEmitter<string>();
  @Output() checkoutCart = new EventEmitter<string>();
  @Output() updateItemQty = new EventEmitter<string>();
  @Output() updateProductSelected = new EventEmitter<string>();

  cartList: CartItem[] = [];
  isCartEmpty: boolean;

  constructor() {}

  ngOnChanges(changes: SimpleChange) {
    for (const propName in changes) {
      if (propName === 'cartDetails') {
        const change = changes[propName];
        this.cartList = change.currentValue;
        this.isCartEmpty = (change.currentValue.length === 0);
      }
    }
  }

  ngOnInit(): void {
  }

  onUpdateItemCount(item, direc) {
    const payload = { item, direc };
    this.updateItemQty.emit(payload);
  }

  onUpdateProductSelected(value, item) {
    const payload = { value, item};
    this.updateProductSelected.emit(payload);
  }

  goBackToMain() {
    this.closeOrderSummary.emit();
  }

  onCheckoutCart() {
    this.checkoutCart.emit();
  }

}


 
implements OnInit, OnChanges

丢失。每当您使用 Angular 生命周期挂钩时,您还应该将相应的 实现 接口添加到控制器 class.

ngOnChanges() function declared in the OnChanges interface accepts parameter of type SimpleChanges and not SimpleChange的参数。正如在其他答案的评论中提到的,在不实现 OnChanges 接口的情况下使用函数 ngOnChanges() 也将被 Angular 接受为生命周期挂钩。但是您收到的类型错误不会被抛出,这可能会导致其他问题。

import { Component, Input, OnInit, Output, EventEmitter, SimpleChanges, OnChanges } from '@angular/core';

ngOnChanges(changes: SimpleChanges) {
  ...
}