es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Teniendo problemas para actualizar los eventos de radCalendar en NativeScript (Angular)

Actualmente tengo problemas para agregar nuevos eventos a un radCalendar. Creé un servicio para actualizar el eventSource al que está unido el radCalendar en el HTML, pero agregar un nuevo evento a esa matriz parece que no actualiza los eventos del radCalendar en absoluto.

HTML:

<radcalendar #calendar="" class="{{dialogShown ? 'content' : ''}}" [eventsource]="eventSource" (dateselected)="onDateSelected($event)" [eventsviewmode]="eventsViewMode"></radcalendar>

Servicio:

import { Injectable } from '@angular/core';
import { Color } from '@nativescript/core';
import { CalendarEvent } from 'nativescript-ui-calendar';

@Injectable()
export class CalendarEventsService {
    public events: Array<calendarevent> = new Array<calendarevent>();;

    createCalendarEvent(startDate, endDate, color, type) {
        endDate.setHours(endDate.getHours() + 2)
        const event = new CalendarEvent(type, startDate, endDate, false, color);
        this.events.push(event);
        return event;
    }

    getCalendarEvents(): Array<calendarevent> {
        return this.events;
    }
}

Llamada del componente para agregar un evento:

saveEvent(inputType) {
    this.selectedCalendarDate.setHours(this.timePicker.hour);
    this.selectedCalendarDate.setMinutes(this.timePicker.minute);
    const event = this.calendarService.createCalendarEvent(this.selectedCalendarDate, this.selectedCalendarDate, 'blue', this.medicineType)
    this.dialogShown = false;
    this.eventSource.push(event);
}

Realmente apreciaría cualquier orientación.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el problema puede ser con la forma en que se actualiza la variable eventSource en el componente. En lugar de agregar el evento recién creado al arreglo eventSource, intente crear un nuevo arreglo con los eventos actualizados y luego asignarlo a eventSource.

    Aquí hay un ejemplo:

    saveEvent(inputType) {
        this.selectedCalendarDate.setHours(this.timePicker.hour);
        this.selectedCalendarDate.setMinutes(this.timePicker.minute);
        const event = this.calendarService.createCalendarEvent(this.selectedCalendarDate, this.selectedCalendarDate, 'blue', this.medicineType);
        this.dialogShown = false;
        const updatedEvents = this.eventSource.concat([event]);
        this.eventSource = updatedEvents;
    }
    

    Esto debería desencadenar la detección de cambios necesaria y actualizar los eventos en el componente radCalendar.

Comments are closed.