Как использовать две трубы подряд в angular - PullRequest
0 голосов
/ 16 июня 2020

У меня есть канал, который преобразует числа в строки.

Import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
  name: 'nomeMesPipe',
})

export class NomeMesPipe implements PipeTransform {
  transform(value: any): string {
    if (value) {
      switch (
        value // Converte o numero em nome do mês
      ) {
        case 0:
          value = 'Janeiro';
          break;
        case 1:
          value = 'Fevereiro';
          break;
        case 2:
          value = 'Março';
          break;
        case 3:
          value = 'Abril';
          break;
        case 4:
          value = 'Maio';
          break;
        case 5:
          value = 'Junho';
          break;
        case 6:
          value = 'Julho';
          break;
        case 7:
          value = 'Agosto';
          break;
        case 8:
          value = 'Setembro';
          break;
        case 9:
          value = 'Outubro';
          break;
        case 10:
          value = 'Novembro';
          break;
        case 11:
          value = 'Dezembro';
          break;
      }
      return value;
    }
    return '';
  }
}

Затем у меня есть дата, которая разделяется на дни, месяц и годы с использованием каналов даты. вот так:

{{data.dataDeAceite | date:'dd'}} // 15
{{data.dataDeAceite | date: 'M'  }} //6
{{data.dataDeAceite | date:'yyyy'}} //2020

Я хочу вернуть строку в соответствии с номером месяца, поэтому я попробовал:

{{ data.dataDeAceite | date: 'M'| nomeMesPipe }}

Но это не сработало.

Как вернуть название месяца на португальском языке с помощью трубок?

Ответы [ 2 ]

1 голос
/ 16 июня 2020

Angular DatePipe возвращает строку, а не число. В вашем корпусе коммутатора проверяются числа. Так что измените свои регистры на строку или значение на строку.

И еще один совет: Дата не начинается с 0 (так что июнь 6, а не 5):

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
  name: 'nomeMes'
})
export class NomeMesPipe implements PipeTransform {
  transform(value: any): string {
    if (value && !isNaN(value)) {
      value = +value;
      switch (
        value // Converte o numero em nome do mês
      ) {
        case 1:
          value = 'Janeiro';
          break;
        case 2:
          value = 'Fevereiro';
          break;
        case 3:
          value = 'Março';
          break;
        case 4:
          value = 'Abril';
          break;
        case 5:
          value = 'Maio';
          break;
        case 6:
          value = 'Junho';
          break;
        case 7:
          value = 'Julho';
          break;
        case 8:
          value = 'Agosto';
          break;
        case 9:
          value = 'Setembro';
          break;
        case 10:
          value = 'Outubro';
          break;
        case 11:
          value = 'Novembro';
          break;
        case 12:
          value = 'Dezembro';
          break;
      }
      return value;
    }
  }

}
1 голос
/ 16 июня 2020

Это не работает, потому что angular канал даты будет возвращать значение в виде строки, если вы конвертируете строку в число внутри настраиваемого канала, он будет работать.

Попробуйте это:

 transform(value: any): string {
    if (value) {
      switch (
        parseFloat(value) 
      ) {
        case 0:
          value = 'Janeiro';
          break;
        case 1:
          value = 'Fevereiro';
          break;
        case 2:
          value = 'Março';
          break;
        case 3:
          value = 'Abril';
          break;
        case 4:
          value = 'Maio';
          break;
        case 5:
          value = 'Junho';
          break;
        case 6:
          value = 'Julho';
          break;
        case 7:
          value = 'Agosto';
          break;
        case 8:
          value = 'Setembro';
          break;
        case 9:
          value = 'Outubro';
          break;
        case 10:
          value = 'Novembro';
          break;
        case 11:
          value = 'Dezembro';
          break;
      }
      return value;
    }
    return '';
  }
...