2017-01-24 3 views
3

Я изучаю Angular2, и я хочу отформатировать число, добавляющее тысячу разделителей запятой. Насколько я читал, это можно сделать с помощью Pipes, дело в том, что я хочу отформатировать число программно в js-файле, а не в html (например, var | number).Angular2 Using Pipes in Component.js

Прежде всего, я понял, что нет автономной трубки NumberPipe, с которой я могу работать (поправьте меня, если я ошибаюсь), наиболее похожий - это CurrencyPipe в @ angular2/common. Так что у меня что-то вроде этого:

import { Component } from '@angular/core'; 
import { CurrencyPipe } from '@angular/common'; 

@Component({ 
    templateUrl: 'test.component.html', 
    styleUrls: ['./test.component.scss'] 
}) 
export class TestComponent { 
    public myNumber = 1000; 

    constructor(private currencyPipe: CurrencyPipe) {  
     var formatted = this.currencyPipe().transform(this.myNumber, 'MXN', true); // Is this correct? 
    } 

} 

Но он бросает мне следующую ошибку: Unhandled Promise отказ: Нет провайдера для CurrencyPipe! ; Зона: угловая ...

Что я делаю неправильно?

Заранее спасибо.

С уважением

+0

Почему бы не использовать его как '{{myNumber | currency: 'USD': true}} ' – MrNew

+1

@MrNew Потому что я извлекаю данные из API, используя его, чтобы нарисовать диаграмму Chart.js ... Нет HTML здесь, поэтому я не могу его использовать {{myNumber | currency}}, мне нужно форматировать данные программно. – didi3r

ответ

6

Первое: вам нужно объявить трубу - добавьте его в разделе NgModule declarations:

declarations: [CurrencyPipe] 

Вторая вещь: трубы не инъекциями, так что вы не можете взять его экземпляр используя систему впрыска угловой зависимости. Вам нужно создать новый экземпляр этого трубопровода вручную, например:

var formatted = (new CurrencyPipe()).transform(this.myNumber, 'MXN', true); 
+1

Это работает ... но мне пришлось передать строку идентификатора языка в качестве параметра в CurrencyPipe при создании экземпляра следующим образом: return new CurrencyPipe ('es-MX'). Transform (this.myNumber, 'MXN', true) ; – didi3r

+0

@ Daniel Kucal - Вы предложили «предоставить» трубу, добавив ее в массив поставщиков. Это выглядит запутанным, поскольку то, что я узнал, пока предоставляются только сервисы, компоненты, трубы и директивы должны быть «импортированы» в массив «Импорт». Я что-то пропустил? –

+1

Привет @DeepakPathak, спасибо за ваш вопрос, инструкция здесь устарела и вызывает ошибку. В предыдущей Угловой версии он также работал с трубкой, добавленной в ** компоненту ** (что важно) поставщиками, я обновил ответ. Компоненты, трубы и директивы должны быть помещены в 'декларации'. 'import' предназначен для импорта одного NgModule в другой. –