Angular6 Получение ошибки при попытке использовать DecimalPipe в пользовательский канал
Я пытаюсь ввести DecimalPipe
на мой пользовательский канал, как описано в этом ответе.
вот код:
@Pipe({name: 'irc'})
export class IRCurrencyPipe implements PipeTransform {
constructor(private decimalPipe: DecimalPipe) {}
transform(value: string | number, type: string = 'rial') {
value = Number(value);
if (isNaN(value)) { throw new Error(`${value} is not a acceptable number`); }
return this.decimalPipe.transform(value, '1.0-0') + ' ریال';
}
}
Но я получаю TypeError: Cannot read property 'transform' of undefined
ошибка при запуске тестов из этого кода.
Я также пытался расширить DecimalPipe
как предложено в этом ответе:
@Pipe({name: 'irc'})
export class IRCurrencyPipe extends DecimalPipe implements PipeTransform {
transform(value: string | number, type: string = 'rial') {
value = Number(value);
if (isNaN(value)) { throw new Error(`${value} is not a acceptable number`); }
return super.transform(value, '1.0-0') + ' ریال';
}
}
Но я получаю: Error: InvalidPipeArgument: 'Cannot read property 'toLowerCase' of undefined' for pipe 'DecimalPipe'
в этом случае. Есть ли рабочее решение для использования одной из встроенных труб под углом к заказной трубе?
2 ответа
Это происходит, когда у вас нет LOCALE_ID
задавать. Вы можете установить это так:
import { LOCALE_ID, NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from '../src/app/app.component';
@NgModule({
imports: [ BrowserModule ],
declarations: [ AppComponent ],
providers: [ { provide: LOCALE_ID, useValue: 'fr' } ],
bootstrap: [ AppComponent ]
})
export class AppModule { }
Смотрите полные документы здесь
Я пытался, и я получаю результат. См код
import { DecimalPipe } from '@angular/common';
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({name: 'currency'})
export class CurrencyPipe extends DecimalPipe implements PipeTransform {
transform(value: string | number, type: string = 'rial') {
value = Number(value);
if (isNaN(value)) { throw new Error(`${value} is not a acceptable number`); }
return super.transform(value, '1.0-0') + ' ریال';
}
}
В модульном тесте вам нужно будет зарегистрировать любую локаль, отличную от используемой по умолчанию (в дополнение к предоставлению LOCALE_ID
):
import localeFr from '@angular/common/locales/fr';
beforeEach(() => {
registerLocaleData(localeFr);
});