À mon avis, il y a deux meilleures directions :
Habillage des constantes en tant que propriété interne du composant
enum.ts
export enum stateEnum {
'DOING' = 0,
'DONE',
'FAILED'
}
component.ts
import { stateEnum } from './enum'
export class EnumUserClass {
readonly stateEnum : typeof stateEnum = stateEnum ;
}
L'exemple utilise un enum, mais il peut s'agir de n'importe quel type de constante définie. typeof
vous offre tous les avantages des fonctions de typage de TypeScript. Vous pouvez utiliser cette variable directement dans les modèles :
composant.html
<p>{{stateEnum.DOING}}<p>
Cette solution est moins efficace en termes d'utilisation de la mémoire, car elle revient à dupliquer les données (ou les références aux constantes) dans chaque composant que vous souhaitez utiliser. En outre, la syntaxe
readonly constData: typeof constData = constData
à mon avis, ils introduisent beaucoup de bruit syntaxique et peuvent être déroutants pour les nouveaux venus.
Intégration d'une constante externe dans une fonction de composant
La deuxième option consiste à envelopper votre variable/constante externe dans une fonction de composant et à utiliser cette fonction dans le modèle :
enum.ts
export enum stateEnum {
'DOING' = 0,
'DONE',
'FAILED'
}
component.ts
import { stateEnum } from './enum'
export class EnumUserClass {
getEnumString(idx) {
return stateEnum[stateEnum[idx]];
}
}
composant.html
<p>{{getEnumString(1)}}</p>
L'avantage est que les données ne sont pas dupliquées dans le contrôleur mais d'autres inconvénients majeurs apparaissent. Selon l'équipe d'Angular, l'utilisation de fonctions dans les templates n'est pas recommandée en raison du mécanisme de détection de changement, qui est beaucoup moins efficace dans le cas de fonctions renvoyant des valeurs aux templates : la détection de changement n'a aucune idée si la valeur renvoyée par une fonction a changé, donc elle sera appelée beaucoup plus souvent que nécessaire (et en supposant que vous renvoyez const
il n'est en fait nécessaire qu'une seule fois, lors du remplissage de la vue du modèle. Il se peut que votre application ne soit qu'une perte d'efficacité (si vous avez de la chance) ou qu'elle s'effondre complètement si la fonction se résout par Observable
par exemple, et vous utilisez async
tuyau pour s'abonner aux résultats. Vous pouvez vous référer à mon court article sur ce sujet ICI