Угловая 2 трубы или директива? какой самый лучший?

У меня есть несколько полей даты в моем приложении. Поэтому мне нужно отправить дату в качестве метки времени в базу данных. Поэтому я планирую написать собственный канал для изменения значения модели. Будет ли это соответствовать моей потребности? или мне нужно написать пользовательскую директиву для этого?

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

@Pipe({name: 'capitalize'})
export class CapitalizePipe implements PipeTransform {
  transform(value: string, args: string[]): any {
    if (!value) return value;

    return value.replace(/\w\S*/g, function(txt) {
        return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
    });
  }
}

person AhammadaliPK    schedule 22.12.2017    source источник
comment
Я бы предложил объяснить ваш случай. нужно отправить дату в качестве отметки времени в базу данных - какое это имеет отношение к вопросу? Вы намерены изменить дату с помощью трубы для этого? Ни директива, ни пайп для этого не подходят.   -  person Estus Flask    schedule 22.12.2017
comment
да, я изменю значение модели с помощью директивы или конвейера, чтобы я мог отправить отметку времени в базу данных, но фактическая дата будет показана пользователю, я так и задумал,   -  person AhammadaliPK    schedule 22.12.2017


Ответы (2)


У тебя наоборот. В Angular конвейеры используются в шаблоне для отображения данных более подходящим способом. Они не предназначены для изменения ваших фактических данных.

Я рекомендую использовать библиотеку ng-bootstrap (вы можете найти ее на Github), чтобы использовать правильный виджет календаря. Модель можно настроить для возврата метки времени.


Изменить: добавление примера вызова в коде:

let name = new UserNamePipe().transform(user);

https://stackoverflow.com/a/35159546/5885595

person Simon S.    schedule 22.12.2017
comment
Можно ли использовать Pipes только в шаблоне? - person Mahi; 22.12.2017
comment
Каналы обычно должны быть зарезервированы для шаблонов, но я обнаружил, что иногда удобно вызывать их и в файле TS. Учтите, что это простые классы, у которых есть метод, называемый преобразованием. См. ответ, например. - person Simon S.; 23.12.2017

Надеюсь, я правильно понял ваш вопрос.
Для конвертации вы можете использовать стандартный DatePipe (или расширить его), например:

{{ dateField | date:'HH:mm:ss SSS'}}
{{ dateField | date:'HHmmssSSS':'+0000'}}
person Mihails Akimenko    schedule 22.12.2017