signal-use-as-signal-template
Exiger () lors de l’accès aux Signals Angular dans les modèles
- ⭐️ Cette règle figure dans le Flat Config
rdlabo.configs.recommended.
Les Signals Angular sont des fonctions. Dans un modèle, un Signal doit être appelé avec () pour lire sa valeur actuelle. Oublier les parenthèses est une erreur fréquente lors d’une migration depuis BehaviorSubject de RxJS ou depuis des entrées model(). Cette règle détecte les identifiants Signal dans les modèles Angular et signale les lectures directes comme {{ count }} ou [hidden]="count".
Détails de la règle
La règle analyse le modèle Angular de chaque @Component. Elle collecte les identifiants Signal à partir de :
- Propriétés de classe initialisées par un appel dont le nom de fonction est
signal,model,computed,linkedSignal,inputoutoSignal. - Propriétés Signal imbriquées dans des littéraux d’objet (par exemple
count = { first: signal(0) }).
La détection repose sur les noms et ne résout pas l’origine des imports. Les imports de fabriques avec alias ne sont pas reconnus, tandis qu’une fonction locale sans rapport portant l’un de ces noms peut être considérée comme une fabrique de Signal. toSignal est couramment importé depuis @angular/core/rxjs-interop ; la règle le reconnaît par son nom plutôt que par son module.
Elle signale ensuite tout endroit du modèle où le Signal est lu sans (). Cela comprend :
- Interpolation
{{ count }} - Liaisons de propriété
[hidden]="count" - Liaisons d’événement `(click)="count > 0 ? ..."
- Expressions de contrôle
@if (count),@switch (count),@for (...; track count) - Chaînage optionnel
count?.signal - Usage de pipe
count | async
La règle prend en charge les composants template comme templateUrl.
Exemples
Incorrect
<div>{{ count }}</div>
<child [hidden]="count > 0"></child>
@if (count) {
<div>Positive</div>
}
<ion-input [formField]="count.first"></ion-input>
Correct
<div>{{ count() }}</div>
<child [hidden]="count() > 0"></child>
@if (count()) {
<div>Positive</div>
}
<ion-input [formField]="count.first()"></ion-input>
Passer une référence de Signal à un enfant
Si un composant enfant attend un objet Signal (pas sa valeur), vous pouvez passer la référence sans () :
<child [inventorySignal]="inventorySignal"></child>
La règle reconnaît ce cas et ne signale pas un Signal direct passé comme attribut lié.
Options
Cette règle n’a pas d’options.
Quand l’activer
Activez cette règle dans tout projet Angular utilisant des Signals. Elle est particulièrement utile pendant la migration depuis du code fondé sur Observable ou l’introduction de model() et input(), car ces API renvoient des objets de type Signal qui doivent être appelés dans le modèle.