2017-09-27 13 views
0

Je le code suivant dans un modèle à partir d'un 4 angulaire application à l'aide NGX-translateangulaire 4 et NGX-translate: éviter double de traduire tuyau en modèle pour la même clé

<a [routerLink]="['birthdays']" [title]="'birthdays.title' | translate"> 
{{ 'birthdays.title' | translate }} 
</a> 

cela fonctionne parfaitement. Mais je dois dupliquer le code qui récupère le translate pour 'birthdays.title'. Y a-t-il un moyen, dans le modèle, de le définir sur une variable et d'utiliser cette variable?

Quelque chose comme (pseudo-code):

<a [routerLink]="['birthdays']" [title]="'birthdays.title' | translate as title"> 
{{ title }} 
</a> 
+0

l'envelopper dans un composant 'de BirtdaysLink' ou regarder h ere ['comment simuler ng-init'] (https://stackoverflow.com/a/41868229/4099454) – Hitmands

+0

@Hitmands cela résout le problème mais ne 'scale' pas: je devrais ajouter un attribut dans le composant pour chaque traduction. Si mon modèle contient 100 clés de traduction, le composant doit également contenir 100 attributs. –

Répondre

0

Je ne pense pas que cela est nécessaire, mais vous pourriez faire obtenir variable dans vos .ts et ensuite utiliser cette variable dans votre code html:

// This is needed because translate get is async :(
birthdayString: string = ''; 

ngAfterViewInit() { 
    this.translate.get('birthdays.title') 
     .subscribe(value => { this.birthdayString = value; }) 
} 

get birthdayText() { 
    return birthdayString; 
} 

et dans votre fichier html:

<a [routerLink]="['birthdays']" [title]="birthdayText"> 
    {{ birthdayText }} 
</a> 
+0

Je savais déjà que c'était possible, mais je ne veux pas le faire dans le composant (.ts), tant que mon modèle peut avoir plusieurs traductions, donc je devrais créer un attribut pour chaque traduction. C'est ainsi dans la question que j'ai mentionnée que je voulais menacer cela dans le fichier .html. En tout cas merci pour l'aide. –