Разделитель запятых в десятичной трубе - PullRequest
0 голосов
/ 21 апреля 2020

Можно ли отформатировать число 0,00 с помощью DecimalPipe без указания локали?

У меня есть требование, когда мне нужно отформатировать число 0,00 или 0.00 независимо от локали .

Приведенная ниже ошибка при создании кода говорит, что это недопустимое число

this.decimalPipe.formatNumber('0,00', '.2-2')

Я не предпочитаю использовать этот способ, чтобы исправить это

let num = '0,00';

num = num.replace(',','.')

this.decimalPipe.formatNumber(num, '.2-2')

1 Ответ

1 голос
/ 22 апреля 2020

В соответствии с запросом реализации разделенного запятыми канала вместо замены строки я использовал предложение @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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...