Подтвердить что ты не робот

Ng-bootstrap: Правильно ли реализовать пользовательский NgbDateParserFormatter, чтобы изменить формат входного значения на NgbInputDatepicker?

Я использую datepicker (ng-boostrap) во всплывающем окне, и я хотел бы изменить формат даты до 'dd-mm-yyyy'.

Это означает, что можно решить, внедряя новый NgbDateParserFormatter, чтобы заменить стандартный NgbDateISOParserFormatter.

Но мне было интересно, есть ли другой способ.

Спасибо,   Нельсон.

UPDATE:

Небольшая реализация NgbDateParserFormatter с использованием moment.js(тестируется с версией 1.0.0-alpha.14 из ng-bootstrap)

import {NgbDateParserFormatter, NgbDateStruct} from '@ng-bootstrap/ng-bootstrap';
import * as moment from 'moment';

export class NgbDateMomentParserFormatter extends NgbDateParserFormatter {
    constructor(private momentFormat: string) {
        super();
    };
    format(date: NgbDateStruct): string {
        if (date === null) {
            return '';
        }
        let d = moment({ year: date.year, 
                         month: date.month - 1, 
                         date: date.day });
        return d.isValid() ? d.format(this.momentFormat) : '';
    }

    parse(value: string): NgbDateStruct {
        if (!value) {
            return null;
        }
        let d = moment(value, this.momentFormat);
        return d.isValid() ? { year: d.year(), 
                               month: d.month() + 1, 
                               day: d.date() } : null;
    }
}

И в модуле вы включаете поставщика, используя factory, чтобы указать формат даты в качестве параметра.

---

@NgModule({

  ---

  providers: [
    { 
      provide: NgbDateParserFormatter, 
      useFactory: () => { return new NgbDateMomentParserFormatter("DD-MM-YYYY") } 
    }
  ]

  ---

})
4b9b3361

Ответ 1

На сегодняшний день реализация пользовательского NgbDateParserFormatter - лучший способ. Так что да, это правильный путь.

В будущем у нас может быть более сложная реализация NgbDateParserFormatter, где вы сможете просто передать желаемый формат (например, yyyy-MM-dd). Добавление этой функции будет зависеть от интереса пользователя.

Вы также можете проверить еще несколько фоновых данных в https://github.com/ng-bootstrap/ng-bootstrap/issues/754#issuecomment-247767027