deny-element
Ce plugin interdit l’utilisation de certaines balises HTML.
- ⭐️ Cette règle figure dans le Flat Config
rdlabo.configs.recommended.
Cette règle empêche l’utilisation d’éléments précis dans les modèles Angular. Elle sert couramment à interdire les composants de superposition intégrés comme <ion-modal>, <ion-popover>, <ion-toast>, <ion-alert>, <ion-loading>, <ion-picker> et <ion-action-sheet>, qui doivent être présentés via des méthodes de lancement ou des services dédiés plutôt que déclarés dans le modèle.
Détails de la règle
La règle s’exécute sur les fichiers de modèles .html et signale tout élément dont le nom de balise figure dans la liste elements configurée. Elle parcourt l’AST du modèle, y compris la syntaxe de contrôle Angular comme @if, @for, @else et les branches imbriquées then / else.
- Les fichiers
.spec.htmlsont ignorés pour ne pas affecter les tests. - Sans option explicite, la règle utilise sa liste par défaut d’éléments de superposition Ionic. Lorsqu’un objet d’options est fourni, son schéma exige un tableau
elements.
Options
{
"rules": {
"@rdlabo/rules/deny-element": [
"error",
{
"elements": ["ion-modal", "ion-popover", "ion-toast", "ion-alert", "ion-loading", "ion-picker", "ion-action-sheet"]
}
]
}
}
elements
- Type :
string[] - Valeur par défaut :
ion-modal,ion-popover,ion-toast,ion-alert,ion-loading,ion-picker,ion-action-sheet
Tableau des noms de balises à interdire. La règle compare ces noms au type de nœud Element de l’AST de modèle Angular ; elle vérifie donc l’élément lui-même et sa présence dans les branches de contrôle.
Exemples
Incorrect
<ion-modal></ion-modal>
<div>
<ion-toast></ion-toast>
<ion-alert></ion-alert>
</div>
@if (showModal) {
<ion-modal>Modal content</ion-modal>
}
Correct
<ion-button (click)="presentModal()">Open</ion-button>
@for (item of items; track item.id) {
<ion-card>
<ion-card-header>{{ item.name }}</ion-card-header>
</ion-card>
}
Quand l’activer
Activez cette règle dans les projets qui utilisent le modèle de lanceur pour les superpositions. Elle s’associe à @rdlabo/rules/prefer-modal-launcher et @rdlabo/rules/prefer-disable-handler pour garder la logique des modales et des superpositions hors du modèle.