typescript - Angular-komponentärv. Hur föräldrars livscykelhakar kan köras?
Så jag har BaseComponent och många barn som utökar det:
export class Child1Component extends BaseComponent implements OnInit, AfterViewInitChild1Component anropar inte super.ngAfterViewInit(), men av någon anledning körs BaseComponent AfterViewInit ändå. Jag loggar det bara i konsolen:
ngAfterViewInit() {
console.log('BaseComponent AfterViewInit')
}
Hur är det möjligt? Vad mer än super.ngAfterViewInit() kan anropa förälderns livscykelhake?
Kunde detta bara hända i utvecklingsläge?
Svar #1
Jag tror att det är normalt beteende för OOP-arv. Om du inte uttryckligen definierar ngAfterViewInit i barnkomponenten, kommer denna komponent att ha förälderns implementation av den metoden tillgänglig.
Så, under komponenternas livscykel, när Angular kontrollerar om ngAfterViewInit-metoden är tillgänglig på barnkomponenten, är svaret ja: barnkomponenten har den metoden implementerad, men den är ärvd från föräldrakomponenten
Svar #2
barnkomponenten kommer att ha (inneboende) alla egenskaper och metoder från baskomponentklassen så normalt kommer barnklassen att ha ngAfterViewInit-metoden och denna kommer att köras av Angular. Om du vill skriva över denna metod, återskapa den helt enkelt i barnklassen så kommer den att ha företräde framför metoden i basklassen, men du kan fortfarande komma åt basklassen genom att använda 💪 super-nyckelordet
export class Child1Component extends BaseComponent implements OnInit, AfterViewInit {
ngAfterViewInit() {
super.ngAfterViewInit(); // 👈 call base ngAfterViewInit method
console.log('Child1Component AfterViewInit');
}
}
ngAfterViewInit är en speciell metod, det är en av livscykelhakarna, en metod som körs och hanteras av Angular, läs mer om detta 👉 här
