无法实例化DatePipe

时间:2016-09-21 04:28:26

标签: angular angular2-pipe

我正在尝试在我的Angular2应用中实例化DatePipe对象,以便在我正在开发的组件中使用transform(...)功能。

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

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

此代码段在RC5中运行良好。现在我正在尝试升级到Angular2最终版本,并在运行ng serveng 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.

如何解决此问题?还有另一种实例化管道的方法吗?或者Angular是否停止支持在组件内实例化管道?

2 个答案:

答案 0 :(得分:20)

如果您查看源代码,那么您将看到DatePipe构造函数请求所需的参数:

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

DataPipe没有默认的区域设置

this post

这就是打字稿给出错误的原因。 这样您就必须启动变量,如下所示:

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
}

希望它对你有所帮助!

答案 1 :(得分:0)

看起来一切正常,错误必须在您的代码中的任何其他位置。 看我的plunker: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 {}

和@Harry Ninh ..你不能注射管道!!