Как отформатировать дату с моментом, чтобы она отображалась в окне выбора даты с помощью ngmodel? - PullRequest
0 голосов
/ 12 января 2019

У меня есть объект времени в моментах, я получаю эту ошибку в консоли веб-браузера:

[Error] ERROR - Ошибка: Uncaught (в обещании): TypeError: date.isValid не является функцией. (В date.isValid (), date.isValid не определено)
fromModel
WriteValue

forEach @ [собственный код]
SetValue

onInvoke
пробег

onInvokeTask
runTask
drainMicroTaskQueue
invokeTask
invokeTask
globalZoneAwareCallback

Ошибка: Uncaught (в обещании): TypeError: date.isValid не является функцией. (В date.isValid (), date.isValid не определено)
fromModel
writeValue

forEach @ [нативный код]
SetValue

onInvoke
запустить

onInvokeTask
runTask
drainMicroTaskQueue
invokeTask
invokeTask
globalZoneAwareCallbackresolvePromise (función anónima) onInvokeTaskrunTaskdrainMicroTaskQueueinvokeTaskinvokeTaskglobalZoneAwareCallback
defaultErrorLogger (core.js: 1873)
handleError (core.js: 1922)
следующий (core.js: 5008: 105)
(función anónima) (core.js: 3993)
__tryOrUnsub (Subscriber.js: 262)
следующий (Subscriber.js: 200)
_next (Subscriber.js: 138)
следующий (Subscriber.js: 102)
следующий (Subject.js: 64)
испускать (core.js: 3985)
запустить (zone.js: 137)
onHandleError (core.js: 4365)
runGuarded (zone.js: 153)
_loop_1 (zone.js: 676)
microtaskDrainDone (zone.js: 685)
стокMicroTaskQueue (zone.js: 601)
invokeTask (zone.js: 499)
invokeTask (zone.js: 1539)
globalZoneAwareCallback (zone.js: 1565)

Все это находится в пользовательском компоненте, но исходит от другой сущности, называемой extendedUser, которая имеет отношение oneToone в DTO от extedededUser. Я расширяю userDTO, чтобы все данные были в порядке, но с датой возникают проблемы, поэтому я извлекаю службу расширенного пользователя, которую я нахожу. некоторые функции для установки даты, и я пытаюсь реализовать ее в бите пользовательского сервиса. Я думаю, что что-то упустил, я делаю консольный журнал на обоих и показываю один и тот же объект данных, поэтому я думаю, что ошибка в сервисе

Служба расширенный пользователь , которая хорошо показывает дату

import { Injectable } from '@angular/core';
import { HttpClient, HttpResponse } from '@angular/common/http';
import { Observable } from 'rxjs';
import * as moment from 'moment';
import { DATE_FORMAT } from 'app/shared/constants/input.constants';
import { SERVER_API_URL } from 'app/app.constants';
import { createRequestOption } from 'app/shared';
import { IExtendedUser } from 'app/shared/model/extended-user.model';
type EntityResponseType = HttpResponse<IExtendedUser>;
type EntityArrayResponseType = HttpResponse<IExtendedUser[]>;
@Injectable({ providedIn: 'root' })
export class ExtendedUserService {
    private resourceUrl = SERVER_API_URL + 'api/extended-users';
    constructor(private http: HttpClient) {}
    create(extendedUser: IExtendedUser): Observable<EntityResponseType> {
        const copy = this.convertDateFromClient(extendedUser);
        return this.http
            .post<IExtendedUser>(this.resourceUrl, copy, { observe: 'response' })
            .map((res: EntityResponseType) => this.convertDateFromServer(res));
    }
    update(extendedUser: IExtendedUser): Observable<EntityResponseType> {
        const copy = this.convertDateFromClient(extendedUser);
        return this.http
            .put<IExtendedUser>(this.resourceUrl, copy, { observe: 'response' })
            .map((res: EntityResponseType) => this.convertDateFromServer(res));
    }
    find(id: number): Observable<EntityResponseType> {
        return this.http
            .get<IExtendedUser>(`${this.resourceUrl}/${id}`, { observe: 'response' })
            .map((res: EntityResponseType) => this.convertDateFromServer(res));
    }
    query(req?: any): Observable<EntityArrayResponseType> {
        const options = createRequestOption(req);
        return this.http
            .get<IExtendedUser[]>(this.resourceUrl, { params: options, observe: 'response' })
            .map((res: EntityArrayResponseType) => this.convertDateArrayFromServer(res));
    }
    delete(id: number): Observable<HttpResponse<any>> {
        return this.http.delete<any>(`${this.resourceUrl}/${id}`, { observe: 'response' });
    }
    private convertDateFromClient(extendedUser: IExtendedUser): IExtendedUser {
        const copy: IExtendedUser = Object.assign({}, extendedUser, {
            fechaIngreso:
                extendedUser.fechaIngreso != null && extendedUser.fechaIngreso.isValid()
                    ? extendedUser.fechaIngreso.format(DATE_FORMAT)
                    : null
        });
        return copy;
    }
    private convertDateFromServer(res: EntityResponseType): EntityResponseType {
        res.body.fechaIngreso = res.body.fechaIngreso != null ? moment(res.body.fechaIngreso) : null;
        return res;
    }
    private convertDateArrayFromServer(res: EntityArrayResponseType): EntityArrayResponseType {
        res.body.forEach((extendedUser: IExtendedUser) => {
            extendedUser.fechaIngreso = extendedUser.fechaIngreso != null ? moment(extendedUser.fechaIngreso) : null;
        });
        return res;
    }
}

Код в моем сервисе пользователя при получении ошибки

import { Injectable } from '@angular/core';
import { HttpClient, HttpResponse } from '@angular/common/http';
import { Observable, of } from 'rxjs';

import { SERVER_API_URL } from 'app/app.constants';
import { createRequestOption } from 'app/shared/util/request-util';
import {IUser } from './user.model';
import {ExtendedUser, IExtendedUser} from "../../shared/model/extended-user.model";
import {DATE_FORMAT} from "../../shared";
import * as moment from 'moment';

type EntityResponseType = HttpResponse<IExtendedUser>;

@Injectable({ providedIn: 'root' })
export class UserService {
    private resourceUrl = SERVER_API_URL + 'api/users';

    constructor(private http: HttpClient) {}

    create(user: IUser): Observable<HttpResponse<IUser>> {
        const copy = this.convertDateFromClient(user);
        return this.http.post<IUser>(this.resourceUrl + '-and-extendedUser', copy, { observe: 'response' })
        .map((res: EntityResponseType) => this.convertDateFromServer(res));
    }

    update(user: IUser): Observable<HttpResponse<IUser>> {
        const copy = this.convertDateFromClient(user);
        return this.http.put<IUser>(this.resourceUrl, copy , { observe: 'response' })
            .map((res: EntityResponseType) => this.convertDateFromServer(res));
    }

    find(login: string): Observable<HttpResponse<IUser>> {
        return this.http.get<IExtendedUser>(`${this.resourceUrl}/${login}`, { observe: 'response' });
    }

    query(req?: any): Observable<HttpResponse<IUser[]>> {
        const options = createRequestOption(req);
        return this.http.get<IUser[]>(this.resourceUrl, { params: options, observe: 'response' }) ;
    }

    delete(login: string): Observable<HttpResponse<any>> {
        return this.http.delete(`${this.resourceUrl}/${login}`, { observe: 'response' });
    }

    authorities(): Observable<string[]> {
        return this.http.get<string[]>(SERVER_API_URL + 'api/users/authorities');
    }
    private convertDateFromClient(user: IExtendedUser): IUser {
        const copy: IUser = Object.assign({}, user, {
            fechaIngreso:
                user.fechaIngreso != null && user.fechaIngreso.isValid()
                    ? user.fechaIngreso.format(DATE_FORMAT)
                    : null
        });
        return copy;
    }
    private convertDateFromServer(res: EntityResponseType): EntityResponseType {
        res.body.fechaIngreso = res.body.fechaIngreso != null ? moment(res.body.fechaIngreso) : null;
        return res;
    }
}

Я хочу показать дату в окне выбора даты.

1 Ответ

0 голосов
/ 13 января 2019

Обновление

Я нашел проблему

Я не устанавливал дату в:

find(login: string): Observable<HttpResponse<IUser>> {
    return this.http.get<IExtendedUser>(`${this.resourceUrl}/${login}`, { observe: 'response' });
}

так что я добавляю это

 find(login: string): Observable<HttpResponse<IUser>> {
        return this.http.get<IExtendedUser>(`${this.resourceUrl}/${login}`, { observe: 'response' })
            .map((res: EntityResponseType) => this.convertDateFromServer(res));
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...