Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 如何在ionic2日历中仅显示一个事件id为的日历?_Angular_Typescript_Ionic4 - Fatal编程技术网

Angular 如何在ionic2日历中仅显示一个事件id为的日历?

Angular 如何在ionic2日历中仅显示一个事件id为的日历?,angular,typescript,ionic4,Angular,Typescript,Ionic4,我正在用ionic 4和Angular开发日历应用程序 我可以从Firebase连接事件和id以删除所选事件。 但是,日历显示了多个 日历上的事件和日历上的事件一样多。 因为我在日历的标签中使用了ngFor 像这样 <ion-content padding> <calendar [eventSource]="eventSource" [calendarMode]="calendar.mode" [currentDate]="calendar.curren

我正在用ionic 4和Angular开发日历应用程序

我可以从Firebase连接事件和id以删除所选事件。 但是,日历显示了多个

日历上的事件和日历上的事件一样多。 因为我在日历的标签中使用了ngFor

像这样

<ion-content padding>
    <calendar [eventSource]="eventSource"
    [calendarMode]="calendar.mode"
    [currentDate]="calendar.currentDate"
    (onCurrentDateChanged)="onCurrentDateChanged($event)"
    (onEventSelected)="onEventSelected($event)"
    (onTitleChanged)="onViewTitleChanged($event)"
    (onTimeSelected)="onTimeSelected($event)"
    [locale]="calendar.locale"
    *ngFor="let dayEvent of (dayEvents | async)"
    [routerLink]="['/day', dayEvent.id]"
    >
</calendar>

我找到了ionic2日历的默认代码。 这正是我想要的


{{event.startTime}日期:'HH:mm'}
-
{{event.endTime}日期:'HH:mm'}
{{allDayLabel}
|{{event.title}
{{noeventslab}

我找到了ionic2日历的默认代码。 这正是我想要的


{{event.startTime}日期:'HH:mm'}
-
{{event.endTime}日期:'HH:mm'}
{{allDayLabel}
|{{event.title}
{{noeventslab}

日历组件的外观如何(按代码)?您必须将事件作为输入传递给它,并在那里正确处理它们。您的日历组件看起来如何(代码方面)?您必须将事件作为输入传递给它,并在那里正确处理它们。
import { AngularFirestore } from '@angular/fire/firestore';
import { HomeService, DayEvent } from './home.service';
import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { Observable } from 'rxjs';

@Component({
  selector: 'app-home',
  templateUrl: 'home.page.html',
  styleUrls: ['home.page.scss'],
})
export class HomePage implements OnInit {
  eventSource = [];
  viewTitle;
  selectedDate = new Date();
  calendar = {
    mode: 'month',
    currentDate: new Date(),
    locale: 'ja-JP'
  };
  dayEvent: DayEvent = {
    title: '',
    startTime: this.selectedDate,
    endTime: this.selectedDate,
    allDay: true
  };

  private dayEvents: Observable<DayEvent[]>;
  lockSwipes: boolean;

  constructor(
    private router: Router,
    private homeService: HomeService,
    private db: AngularFirestore,
  ) {
    this.db.collection(`events`).snapshotChanges().subscribe(colSnap => {
      this.eventSource = [];
      colSnap.forEach(snap => {
       const event: any = snap.payload.doc.data();
       event.id = snap.payload.doc.id;
       event.startTime = event.startTime.toDate();
       event.endTime = event.endTime.toDate();
       this.eventSource.push(event);
        });
    });

    }


  ngOnInit() {
    this.dayEvents = this.homeService.getEvents();
  }

  onViewTitleChanged(title) {
    this.viewTitle = title;
  }


//Doesn't work...
 onEventSelected = (event) => {
        console.log(event.title);
    };


  onTimeSelected(ev) {
    const selected = new Date(ev.selectedTime);
    console.log(selected);
    this.homeService.selectedDate = selected;
  }

  onCurrentDateChanged(event: Date) {

  }



  today() {
    this.calendar.currentDate = new Date();
  }


}

import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { AngularFirestore, AngularFirestoreCollection } from '@angular/fire/firestore';
import { map, take } from 'rxjs/operators';

export interface DayEvent {
  id?: string;
  title: string;
  endTime: Date;
  startTime: Date;
  allDay: boolean;
}

@Injectable({
  providedIn: 'root'
})
export class HomeService {
  private dayCollection: AngularFirestoreCollection<DayEvent>;
  private dayEvents: Observable<DayEvent[]>;

  eventSource = [];
  selectedDate = new Date();

  constructor(
    private afs: AngularFirestore
  )
  {
    this.dayCollection = this.afs.collection<DayEvent>(`events`);
    this.dayEvents = this.dayCollection.snapshotChanges().pipe(
      map(actions => {
        return actions.map(a => {
          const event = a.payload.doc.data();
          const id = a.payload.doc.id;
          return { id, ...event };
        });
      })
    );
  }

  getEvents(): Observable<DayEvent[]> {
    return this.dayEvents;
}


  getEvent(id: string) {
    return this.dayCollection.doc<DayEvent>(id).valueChanges().pipe(
      take(1),
      map(dayEvent => {
        dayEvent.id = id;
        return dayEvent;
      })
    );
  }

  addNewEvent() {
    const start = this.selectedDate;
    const end = this.selectedDate;
    end.setMinutes(end.getHours() + 1);
    const event = {
       title: 'Your Event ' + start.getMinutes(),
       startTime: start,
       endTime: end,
       allDay: true
    };
    return this.afs.collection(`events`).add(event);
  }

  deleteEvent(id: string): Promise<void> {
    return this.afs.collection(`events`).doc(id).delete();
  }
}

import { HomeService, DayEvent } from './../home/home.service';
import { Component, OnInit } from '@angular/core';
import { Router, ActivatedRoute } from '@angular/router';
import { ToastController } from '@ionic/angular';


@Component({
  selector: 'app-day',
  templateUrl: './day.page.html',
  styleUrls: ['./day.page.scss'],
})

export class DayPage implements OnInit {
  eventSource = [];
  viewTitle;
  selectedDate = new Date();

  dayEvent: DayEvent = {
    title: '',
    startTime: this.selectedDate,
    endTime: this.selectedDate,
    allDay: true
  };
  id = null;

  constructor(
    private homeService: HomeService,
    private router: Router,
    private activatedRoute: ActivatedRoute,
    private toastCtrl: ToastController,
  ) {
  }

  ngOnInit() {
    this.id = this.activatedRoute.snapshot.paramMap.get('id');
  }

  ionViewWillEnter() {
    if (this.id) {
     this.homeService.getEvent(this.id).subscribe(dayEvent => {
        this.dayEvent = dayEvent;
      });
    }
  }


  addNewEvent() {
    this.homeService.addNewEvent().then(() => {
      this.router.navigateByUrl('/');
    });
  }

  deleteEvent() {
    this.homeService.deleteEvent(this.dayEvent.id).then(() => {
      this.router.navigateByUrl('/');
      this.showToast('delete');
    },
      err => {
        this.showToast('There is a some problem.');
      });
  }

  showToast(msg) {
    this.toastCtrl.create({
      message: msg,
      duration: 2000
    }).then(toast => toast.present());
  }

}