d'abord, ce que je voudrais accomplir:tube de format de date personnalisée angular2 qui utilise les traductions
Disons que j'ai un modèle pour un affichage qui contient un objet Date js. Maintenant, je voudrais rendre la date dans un format personnalisé, lisible par l'homme, qui ne montre pas de date et d'heure, mais plutôt un décalage par rapport à maintenant ("juste maintenant", "il y a environ une heure", " etc.).
Je suis nouveau à la fois, tapuscrit et angular2, mais de ce que je lis jusqu'à présent, l'approche la plus élégante serait d'utiliser un tuyau personnalisé comme ça:
@Pipe({name: 'hrTime'})
export class HrTimePipe implements PipeTransform {
constructor(private translate: TranslateService) {
}
transform(val: Date): string {
// Roughly check if that date is about one hour ago
let now: Date = new Date();
now.setMinutes(now.getMinutes() - 90);
if (val > now) {
return this.translate.instant("about_1_h_ago");
}
}
}
Le problème avec cette approche est que La méthode instant()
de TranslateService ne vérifie pas que le fichier de traduction est chargé au moment où ce tube est construit ou utilisé. Par conséquent, mon tube personnalisé renvoie actuellement ma clé de traduction (puisque instant()
ne trouve pas ma traduction). Pour des intervalles de temps plus longs (c'est-à-dire plus d'un jour auparavant), mon tube doit utiliser uniquement le tube de format de date, il n'est donc pas vraiment possible de renvoyer une clé de traduction à canaliser dans translate
.
Avez-vous des suggestions? Est-ce que l'utilisation d'un tuyau personnalisé est la bonne approche pour ce que je voudrais accomplir?
Merci!
Vous pouvez utiliser le jeton opaque APP_INITIALIZER pour fournir les traductions au début de l'application. Regardez [this] (https://gist.github.com/M4R1KU/20359bd6bebfe0a9b0107d82ed729fbc) l'essentiel du mien. – M4R1KU