我在包含汽车数组的角度应用程序上有 Race 组件。我的所有组件都使用 onPush 更改检测。
我在比赛组件上有一个按钮,该按钮仅使 cars.push(new Car) 和所有子组件视图根据此更新。
我不明白为什么视图会更新,它假设仅在参考更改时更新。
(我做了检查,我看到参考是相等的)
汽车组件只显示汽车。
有人可以解释为什么会这样?
种族成分 ts
import { Component, DoCheck, ChangeDetectionStrategy } from '@angular/core';
@Component({
selector: 'app-exp-race',
templateUrl: './exp-race.component.html',
styleUrls: ['./exp-race.component.css'],
changeDetection: ChangeDetectionStrategy.OnPush
})
export class ExpRaceComponent implements DoCheck {
cars = [
{id: 1, color: 'green'},
{id: 2, color: 'blue'},
{id: 3, color: 'black'}
]
ngDoCheck(): void {
console.log('RACE CHECK');
}
changeFirstCarColor() {
this.cars[0].color = 'yellow';
}
addNewCar() {
let x = this.cars;
this.cars.push({
id: 4,
color: 'red'
})
console.log(this.cars === x)
}
}
种族组件 html -
<h1>RACE</h1>
<div *ngFor="let car of cars">
<app-exp-car [car]="car"></app-exp-car>
</div>
<button (click)="changeFirstCarColor()">Change First Car Color</button>
<button (click)="addNewCar()">Add New Car</button>
汽车零部件 ts -
import { Component, Input, DoCheck, ChangeDetectionStrategy } from '@angular/core';
@Component({
selector: 'app-exp-car',
templateUrl: './exp-car.component.html',
styleUrls: ['./exp-car.component.css'],
changeDetection: ChangeDetectionStrategy.OnPush
})
export class ExpCarComponent implements DoCheck {
@Input() car;
ngDoCheck(): void {
console.log(`CAR ${this.car.id} CHACK`);
}
}