Вот самое короткое, что я могу получить:
Это будет работать во всех браузерах, с которыми я столкнулся.
Как я туда попал:
getFullYear
непосредственно на вновь созданной Date
, не нуждаясь в переменной. new Date().getFullYear()
может показаться немного странным, но он надежен: сначала выполняется часть new Date()
, затем .getFullYear()
. type
, поскольку JavaScript по умолчанию; это даже документировано как часть спецификации HTML5 , которая, вероятно, в этом случае должна записывать, какие браузеры уже делают. Важно отметить, что это работает только в браузерах, где включен JavaScript. В идеале, это будет лучше обрабатываться как автономное пакетное задание (скрипт sed
на * nix и т. Д.) Один раз в год, но если вы хотите использовать решение для JavaScript, я думаю, что это так короче, как это получается. (Теперь я ушел и искушал судьбу.)
Вы должны убедиться, что ваш params uid не определен.
import { Component, ElementRef, NgModule, NgZone, OnInit, ViewChild, Input, Output, EventEmitter } from '@angular/core';
import { FormControl, FormsModule, ReactiveFormsModule } from "@angular/forms";
import { BrowserModule } from "@angular/platform-browser";
import { AngularFireDatabase } from '@angular/fire/database';
import { Observable, Subscription } from 'rxjs';
import { ActivatedRoute } from '@angular/router';
import {
DateAdapter,
NativeDateAdapter,
MAT_DATE_FORMATS,
MAT_DATE_LOCALE
} from "@angular/material/core";
import * as moment from "moment";
import { DatabaseService } from 'src/app/database.service'
const CUSTOM_DATE_FORMATS = {
parse: {
dateInput: { month: "short", year: "numeric", day: "numeric" }
},
display: {
dateInput: "input",
monthYearLabel: { year: "numeric", month: "short" },
dateA11yLabel: { year: "numeric", month: "long", day: "numeric" },
monthYearA11yLabel: { year: "numeric", month: "long" }
}
};
const dateFormat = "DD-MM-YY";
class AppDateAdapter extends NativeDateAdapter {
format(date: Date, displayFormat: Object): string {
if (displayFormat === "input") {
return moment(date).format(dateFormat);
} else {
return date.toDateString();
}}}
export class HistoryComponent implements OnInit, OnDestroy {
get data(): string {return this.databaseService.serviceData;}
set data(date) {this.databaseService.serviceData=moment(date).format(dateFormat));}
snaps: Observable<any[]>;
uid: string;
@Input() placeholder;
@Output() onFilter: EventEmitter<any> = new EventEmitter<any>();
@Input() selectedValue;
@Output() selectedValueChange: EventEmitter<any> = new EventEmitter<any>();
routeSub: Subscription;
constructor(
private db: AngularFireDatabase,
private ngZone: NgZone,
private afs: AngularFirestore,
public databaseService: DatabaseService,
private route: ActivatedRoute
){ }
ngOnInit() {
this.routeSub = this.route.params
.subscribe(params => {
this.uid = params('uid');
this.snaps = db.list(`snapity-tests/${this.databaseService.serviceData}/${this.uid}`).valueChanges();
})
}
ngOnDestroy(){
if(this.routeSub){
this.routeSub.unsubscribe();
}
}
onChange($event) {
this.selectedValue = this.updateDate($event.value);
this.onFilter.emit(this.data);
}
updateDate(date) {
let formatedDate;
if (date !== undefined) {
formatedDate = moment(date).format(dateFormat);
}
this.selectedValueChange.emit(formatedDate);
return formatedDate;
}
}}
Я вижу, у вас есть this.databaseService.serviceData
, но я не могу найти ни одного this.databaseService
, определенного в вашем конструкторе, и я не уверен, что находится в конце serviceData
.
Путь firebase должен быть string
, если this.databaseService.serviceData
не является переменной, возвращающей string
, тогда я сомневаюсь, что вы получите что-нибудь от firebase. Поэтому ваш путь неверен.