Angulaire 2 “il y a le temps” pipe
Je suis en train de créer un temps auparavant,' pipe pour mon Angulaire 2 de la demande.
Il doit transformer une date en une chaîne de caractères tels que "5 minutes" ou "60 secondes auparavant". Il fonctionne très bien, jusqu'à présent, mais elle n'est pas mise à jour après le premier calcul. Si la date donnée est par exemple 5 secondes à peine, il affiche " 5 secondes auparavant, mais il ne change plus par la suite.
J'ai déjà essayé le réglage de l'tuyaux "pure" de la valeur à false mais cela n'a pas aidé.
Voici mon code:
import {Pipe, PipeTransform} from 'angular2/core';
@Pipe({
name: 'messageTime',
pure: false
})
export class MessageTimePipe implements PipeTransform {
transform(value: Date, []): string {
var result: string;
//current time
let now = new Date().getTime();
//time since message was sent in seconds
let delta = (now - value.getTime()) /1000;
//format string
if (delta < 10) {
result = 'jetzt';
} else if (delta < 60) { //sent in last minute
result = 'vor ' + Math.floor(delta) + ' Sekunden';
} else if (delta < 3600) { //sent in last hour
result = 'vor ' + Math.floor(delta /60) + ' Minuten';
} else if (delta < 86400) { //sent on last day
result = 'vor ' + Math.floor(delta /3600) + ' Stunden';
} else { //sent more than one day ago
result = 'vor ' + Math.floor(delta /86400) + ' Tagen';
}
return result;
}
}
Je suis en utilisant le filtre comme ceci:
Tapuscrit:
import {Component, Input} from 'angular2/core';
import {MessageTimePipe} from '../../pipes/message-time.pipe';
@Component({
selector: 'message-item',
pipes: [MessageTimePipe],
templateUrl: 'build/components/message-item/message-item.component.html'
})
export class MessageItemComponent {
@Input()
message: JSON;
date: Date;
ngOnInit() {
this.date = new Date(2016, 3, 16, 12, 49, 10);
}
}
HTML:
<p class="time">
{{ date | messageTime }}
</p>
pouvez vous aussi vous montrer comment vous êtes en utilisant ce canal.?
OriginalL'auteur user2611144 | 2016-04-16
Vous devez vous connecter pour publier un commentaire.
A finalement obtenu ce travail, assez difficile et nécessite l'intervalle de peaufinage:)
je suis d'étendre
async
tube, qui est capable de suivre les phénomènes observables et la mise à jour de la vue. Il serait peut-être préférable de mettre en œuvre un tel tube partir de zéro en utilisantasync
source à titre d'exemple, mais je n'ai pas assez de temps.Est-ce de travailler avec angulaire 2 version stable? J'obtiens une erreur dans cette ligne:
export class MessageTimePipe extends AsyncPipe
=>Type 'any' is not a constructor function type
OriginalL'auteur kemsky
J'ai juste utilisé ce:
https://www.npmjs.com/package/time-ago-pipe
Puis dans le @NgModule vous souhaitez l'utiliser dans:
Et dans le modèle:
Ne pas réinventer la roue, sauf si vous envisagez d'apprendre plus au sujet de roues.
ce n'est pas pour ionic2
Je l'ai utilisé dans un Ionique 2 app.
Ou si vous êtes originaire d'un pays anglophone non et que la bibliothèque ne vous convient...
Excellent!!! Il travaille avec Ionique 2 sans problèmes!!
OriginalL'auteur David Prieto
Basé sur l'excellente réponse par @kemsky, j'ai mis en œuvre une variante de la Pipe qui corrige quelques problèmes de mise en œuvre:
Vous trouverez l'intégralité du tuyau + spec code dans ce résumé:
https://gist.github.com/JohannesRudolph/8e6de056d9e33353f940d9da9e6ffd82
return Observable.of(1)
j'ai utilisé l'approche originale dereturn Observable.interval(1000).startWith(0)
OriginalL'auteur Johannes Rudolph
Je pense qu'il n'est pas lié à votre tuyau, mais à la façon Angular2 détecte les changements. Il détecte les modifications sur la base de références, c'est à dire si les références liées au changement et pas si des éléments sont mis à jour.
Voir l'exemple suivant:
Voir thisx plunkr: https://plnkr.co/edit/kJdi1wx0iu9tDx8yTmRx?p=preview.
OriginalL'auteur Thierry Templier
Vous avez besoin de mettre à jour la " date de référence pour déclencher Angular2 de détection de changement, avec un
setTimeout(()=>this.date=new Date(), period)
par exemple, comme Thierry l'a souligné.Avez-vous vraiment besoin d'une mise à jour à chaque seconde?
Mise à jour toutes les 60 secondes peut-être assez bon selon votre cas d'utilisation, et peut afficher 'maintenant' ou 'moins qu'il y a une minute" pour les 60 premières secondes.
Mais si vous voulez vraiment les secondes, vous avez seulement besoin de mettre à jour toutes les secondes pour les 60 premières secondes. Le
setTimeout(1000)
peut alors devenirsetTimeout(60000)
, tout en minimisant les coûts.OriginalL'auteur Julien
Le Temps-il Y a dans AngularJs2
Vous avez besoin pour exécuter cette commande npm install de temps-il y a-pipe-enregistrer pour installer le temps-il ya mnp package package dans votre angulaire de l'application
ex : PS D:\D\TimeAgo> npm install de temps-il y a-pipe-enregistrer. Après avoir exécuté cette commande, le colis sera ajouté.
L'Image montre comment ajouter importer {TimeAgoPipe} 'time-y-pipe"; dans l'app.module et mettre TimeAgoPipe dans les Déclarations[Pass d'entrée de composanto/p
OriginalL'auteur Bharath Kalakoti
Un moment.js solution. Travail/testé Angulaire 6:
OriginalL'auteur kenny