В соответствии с запросом реализации разделенного запятыми канала вместо замены строки я использовал предложение @Igor и просто создал экземпляр с языковым стандартом, который использует запятую в качестве десятичного разделителя:
@Pipe({
name: 'commaDecimal'
})
export class CommaSeparaterDecimalPipe extends DecimalPipe {
// Use a locale which has a comma separator, don't forget to register it
transform(value: any, digitsInfo?: string, locale = 'fr'): string | null {
return super.transform(value, digitsInfo, locale);
}
}
По моему мнению, это намного чище, если у вас есть конкретная c труба для вашего случая использования, поэтому у вас есть одна контрольная точка, на случай, если в будущем потребуются другие изменения. Если вы все-таки предпочитаете go с заменой строки, просто назначьте возвращаемое значение из супер-вызова, выполните манипуляции со строками и верните значение. Например,
let transformed = super.transform(value, digitsInfo, locale);
return `:) ${transformed}`; // using back ticks here
для рендеринга каждого числа с префиксом смайлика.
Редактирование : поскольку в вопросе используется только метод formatNumber()
, труба может быть не лучшим решением для вас, так как сильной стороной труб является то, что их можно использовать в HTML. Поэтому, если вы когда-либо вызываете formatNumber
, вы также можете просто экспортировать свою собственную функцию:
import {formatNumber} from '@angular/common';
export function formatCommaDecimalNumber(value: number, locale = 'en-US', digitsInfo = '.2-2'): string {
// No need to instantiate Pipes at least since Angular 8
let formatted = formatNumber(value, locale, digitsInfo);
// Handle string replacement
...
return formatted;
}
Если вам также нужна эта функция в HTML, просто создайте пользовательский канал в любом случае, но вызовите свой пользовательский Функция formatCommaDecimalNumber
вместо дублирования логики c.