no-component-method-except-lifecycle
Verbietet Methoden außerhalb des Lebenszyklus an
@Component. Zulässige Lebenszyklusmethoden werden ausimplementsabgeleitet; Properties sind erlaubt.
- ⭐️ Diese Regel ist in der Flat Config
rdlabo.configs.recommendedenthalten.
Diese Regel erzwingt schlanke Komponenten. Eine Komponente sollte Lebenszyklushooks, delegierte Ereignishandler und schreibgeschützte View-Properties enthalten. Beliebige Geschäftslogik sollte in einem ViewModel liegen, auf das die Komponente über ihre Property vm zugreift.
Einzelheiten der Regel
Die Regel prüft Methoden innerhalb von Klassen mit @Component:
constructor, Getter und Setter werden ignoriert.- Methoden, deren Name zu einem in
implementsdeklarierten Lebenszyklusinterface gehört, sind erlaubt, beispielsweisengOnInitbei implementiertemOnInitoderionViewWillEnterbei implementiertemViewWillEnter. - In
additionalAllowedMethodsaufgeführte Methoden sind erlaubt. - Alle anderen Methodendefinitionen werden gemeldet.
Die Regel meldet auch Lebenszyklusmethoden ohne implementiertes passendes Interface. Beispielsweise wird eine Methode ionViewWillEnter ohne implements ViewWillEnter gemeldet.
Unterstützte Lebenszyklusinterfaces
| Interface | Methode |
|---|---|
OnChanges |
ngOnChanges |
OnInit |
ngOnInit |
DoCheck |
ngDoCheck |
AfterContentInit |
ngAfterContentInit |
AfterContentChecked |
ngAfterContentChecked |
AfterViewInit |
ngAfterViewInit |
AfterViewChecked |
ngAfterViewChecked |
OnDestroy |
ngOnDestroy |
ViewWillEnter |
ionViewWillEnter |
ViewDidEnter |
ionViewDidEnter |
ViewWillLeave |
ionViewWillLeave |
ViewDidLeave |
ionViewDidLeave |
ViewWillUnload |
ionViewWillUnload |
Beispiele
Inkorrekt
@Component({ selector: 'app-example', template: '' })
export class ExamplePage {
open() {
launchOtherPage(this.helper, {});
}
reload() {
this.vm.reload$.next();
}
}
@Component({ selector: 'app-example', template: '' })
export class ExamplePage {
ionViewWillEnter() {} // implements ViewWillEnter fehlt
}
Korrekt
@Component({ selector: 'app-example', template: '' })
export class ExamplePage implements ViewWillEnter, ViewWillLeave, OnDestroy {
readonly vm = new ViewModel(this);
readonly open = () => launchOtherPage(this.helper, {});
ionViewWillEnter() {
this.vm.reload$.next();
}
ionViewWillLeave() {}
ngOnDestroy() {}
}
@Component({ selector: 'app-example', template: '' })
export class ExamplePage implements ViewWillEnter {
ionViewWillEnter() {}
trackById(_index: number, item: { id: number }) {
return item.id;
}
customHook() {}
}
{
"rules": {
"@rdlabo/rules/no-component-method-except-lifecycle": [
"error",
{
"additionalAllowedMethods": ["trackById", "customHook"]
}
]
}
}
Optionen
{
"rules": {
"@rdlabo/rules/no-component-method-except-lifecycle": [
"error",
{
"additionalAllowedMethods": []
}
]
}
}
additionalAllowedMethods
- Typ:
string[] - Standard:
[]
Methodennamen, die zusätzlich zu Lebenszyklusmethoden erlaubt sind. Verwenden Sie dies für Hilfsmethoden wie trackById, die zum Template-Vertrag der Komponente gehören.
Wann die Regel aktiviert werden sollte
Aktivieren Sie diese Regel, wenn Komponenten in Ihrem Projekt schlank bleiben und Logik in ViewModels liegen soll. Sie ergänzt @rdlabo/rules/require-viewmodel.