web-dev-qa-db-fra.com

Impossible d'instancier DatePipe

J'essaie d'instancier un objet DatePipe dans mon application Angular2 pour qu'il utilise la fonction transform(...) dans un composant que je développe.

// ...
import { DatePipe } from '@angular/common';

@Component({...})
export class PanelComponent implements OnInit {
    // ...
    datePipe: DatePipe = new DatePipe(); // Error thrown here
    // ...
}

Ce segment de code a bien fonctionné dans RC5. Maintenant, j'essaie de passer à la version finale d'Angular2 et j'obtiens cette erreur lorsque j'exécute ng serve ou ng build,

~/tmp/broccoli_type_script_compiler-input_base_path-XitPWaey.tmp/0/src/app/panel/panel.component.ts (33, 24): 
Supplied parameters do not match any signature of call target.

Comment puis-je résoudre ce problème? Y a-t-il un autre moyen d'instancier un tuyau? Ou bien, Angular a-t-il cessé de prendre en charge l'instanciation de Pipes dans les composants?

7

Si vous examinez le code source, vous verrez que le constructeur DatePipe demande un paramètre obligatoire:

constructor(@Inject(LOCALE_ID) private _locale: string) {}

Il n'y a pas de paramètres régionaux par défaut pour DataPipe

https://github.com/angular/angular/blob/2.0.0/modules/%40angular/common/src/pipes/date_pipe.ts#L97

C'est pourquoi TypeScript donne l'erreur. De cette façon, vous devez initialiser votre variable comme indiqué ci-dessous:

datePipeEn: DatePipe = new DatePipe('en-US')
datePipeFr: DatePipe = new DatePipe('fr-FR')
constructor() {
  console.log(this.datePipeEn.transform(new Date(), 'dd MMMM')); // 21 September
  console.log(this.datePipeFr.transform(new Date(), 'dd MMMM')); // 21 septembre
}

J'espère que ça vous aide! 

20
yurzui

tout va bien, l'erreur doit figurer n'importe où dans votre code. Voir mon lecteur: https://plnkr.co/edit/koDu6YmB131E6sXc6rKg?p=preview

import {Component, NgModule} from '@angular/core'
import {BrowserModule} from '@angular/platform-browser'
import {DatePipe} from '@angular/common';

@Component({
  selector: 'my-app',
  template: `
    <div>
      <h2>Hello {{name}}</h2>
    </div>
  `,
})
export class App {

  dPipe = new DatePipe();

  constructor() {
    this.name = 'Angular2'
    console.dir(this.dPipe);
    console.log(this.dPipe.transform(new Date(), 'dd.MM'));
  }
}

@NgModule({
  imports: [ BrowserModule ],
  declarations: [ App ],
  bootstrap: [ App ]
})
export class AppModule {}

Et @ Harry Ninh .. vous ne pouvez pas injecter des pipes !!

0
mxii