2016-09-21 18 views
5

Tôi đang cố gắng khởi tạo đối tượng DatePipe trong ứng dụng Angular2 của mình để sử dụng hàm transform(...) trong một thành phần mà tôi đang phát triển.Không thể khởi tạo DatePipe

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

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

Đoạn mã này hoạt động tốt trong RC5. Bây giờ tôi đang cố gắng để nâng cấp lên Angular2 phát hành cuối cùng và nhận được lỗi này khi tôi chạy ng serve hoặc 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. 

Làm thế nào tôi có thể giải quyết vấn đề này? Có cách nào khác để khởi tạo một ống không? Hoặc có Angular ngừng hỗ trợ instantiating của ống bên trong các thành phần?

+0

Bạn chỉ đang sử dụng đường ống theo cách sai. Bạn không nên tự khởi tạo đường ống, thay vào đó hãy sử dụng DI. –

Trả lời

14

Nếu bạn có một cái nhìn vào mã nguồn sau đó bạn sẽ thấy rằng DatePipe constructor yêu cầu một tham số yêu cầu:

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

Không có locale mặc định cho DataPipe

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

Đó là lý do tại sao typecript đưa ra lỗi. Bằng cách này, bạn phải bắt đầu biến của mình như được hiển thị bên dưới:

Hy vọng nó sẽ giúp bạn!

+0

Cảm ơn bạn. Điều này giải quyết vấn đề của tôi. Rõ ràng, nhà xây dựng mới này được giới thiệu trong Angular2 RC6. Tôi đã bỏ lỡ kể từ khi tôi nâng cấp từ RC5 lên bản phát hành cuối cùng .. Yêu cầu kéo - [sửa (i18n): Tiền tệ/Ngày/Số ống sử dụng địa điểm được tiêm] (https://github.com/angular/angular/commit/ 0a053a4cd52312e03179a3dfb5b6903aaa5a5a2e) –

0

có vẻ ổn, lỗi phải ở bất kỳ nơi nào khác trong mã của bạn. Xem plunker tôi: 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 {} 

Và @Harry Ninh .. bạn không thể tiêm Ống !!

+0

Tôi tin rằng plunker vẫn sử dụng phiên bản Angular2 cũ hơn. Sau câu trả lời của @ yurzui tôi đã kiểm tra lịch sử lớp DatePipe và thấy rằng hàm tạo mới được giới thiệu trong RC6 bằng yêu cầu kéo này. [sửa chữa (i18n): tiền tệ/Ngày/Số ống sử dụng địa phương tiêm] (https://github.com/angular/angular/pull/11093) –

Các vấn đề liên quan