Básicamente, por lo que entiendo, la Detección de cambios angulares volverá a representar el componente si se produce un cambio o, para ser precisos, si ha cambiado una propiedad utilizada en la plantilla. En cualquier otro caso, no volverá a generar (innecesariamente) ese componente si el valor permanece igual.
Aquí está el ejemplo que he hecho, el botón dentro del componente activa el CD. La llamada de ese evento de clic de botón está vacía, por lo que no actualiza ningún valor dentro del componente. Solo esto que se usa en la plantilla es una función captadora que siempre devuelve el mismo valor simple.
Entonces, si el CD comparó el valor anterior y el actual, no hay cambios, entonces, ¿por qué parece que el componente se reprodujo desde que se llamó al registro de la consola dentro de la función getter?
O se me pasó por la cabeza, se llamó a console.log dentro del getter durante la comparación del valor del CD y el componente realmente no se volvió a renderizar.
Aquí está el ejemplo https://angular-playground.stackblitz.io .
import { ChangeDetectionStrategy } from '@angular/core/src/change_detection/constants'; @Component({ selector: 'my-app', styleUrls: ['./app.component.scss'], templateUrl: './app.component.html', changeDetection: ChangeDetectionStrategy.OnPush }) export class AppComponent { get lastName() { console.log('CD triggered rerender') return 'Boodin'; } buttonClick(){ //does nothing, doesnt set any value! } } <p>{{lastName}}</p> <button (click)="buttonClick()">Trigger Change Detection</button>