Nano Hash - криптовалюты, майнинг, программирование

обновить angular2-fullcalendar после ngAfterViewInit

Хорошо, это что-то новое, и я не получил ответа ни в одной теме, связанной с angular2-fullcalendar.

Я могу скомпилировать то, что сказано и написано в этой документации angular2-fullcalendar

Проблема возникает, когда я пытаюсь заполнить календарь своими событиями после инициализации представления.

Сценарий 1:

  1. Просмотр нагрузок
  2. Показывает календарь
  3. События отображаются (жестко закодированы)

Сценарий 2:

  1. Просмотр нагрузок
  2. Показывает календарь
  3. получение записей (с сервера)
  4. Попросил angular2-fullcalender обновить мое представление.
  5. Ни ошибки, ни события не отображаются.

HTML:

<angular2-fullcalendar [options]="some" id="mycal" #mycal></angular2-fullcalendar>

Рабочий пример: сценарий 1

event: any[] = 
          [{
            title: 'Long Event',
            start: '2017-02-21',
            end: '2017-02-22'
          },{
            title: 'Long Event',
            start: '2017-02-16T16:00:00',
            end: '2017-02-17'
          }];
calOptions: Options = {};
ngOnInit() 
{
 this.some.events = this.event;
}

Нерабочий пример: Сценарий 2

event: any[] = 
          [{
            title: 'Long Event',
            start: '2017-02-21',
            end: '2017-02-22'
          },{
            title: 'Long Event',
            start: '2017-02-16T16:00:00',
            end: '2017-02-17'
          }];
ngOnInit() { this.getBookings(); }

getBookings() {

        this._service.getEvents().subscribe(values => {

this.updateCalendar();

}, () => console.log('error'))

updateCalendar()
    {
this.calOptions.events = this.event;
      //$(this.element.nativeElement).fullCalendar('updateEvents',this.event) //I tried doing the query way too, but it failed.
    }
26.02.2017

  • В чем ошибка? 26.02.2017
  • В том то и проблема, ошибки нет! Календарь не обновляется, как только я сохраняю их после вызова сервера! 26.02.2017
  • Куда вы звоните updateCalendar? 26.02.2017
  • @yurzui спасибо за ответ. Я звоню в getBookings(), обновленный Сценарий 2. Спасибо. 26.02.2017
  • Меня устраивает. Я сделаю плунжер 26.02.2017
  • plnkr.co/edit/DicnkFVFhpEwJlRFMnOY?p=preview Но я ошибся, я использовал addEventSource . И я думаю, что вам не нужен этот пакет, потому что это просто обертка 27.02.2017
  • Это решено! Спасибо. 27.02.2017

Ответы:


1

1: Установка NPM

npm install fullcalendar

npm i angular2-fullcalendar

npm install jquery

npm install moment

2: Удалите angular2-fullcalendar из node_modules и поместите его в папку app

3: Откройте Systemjs.config.js Добавьте приведенный ниже фрагмент в конце раздела map.

'moment': 'npm:moment',
'jquery':'npm:jquery/dist/jquery.js',
'fullcalendar':'npm:fullcalendar/dist/fullcalendar.js'

Я прикрепил файл ниже только для справки.

4: Откройте app.module.ts импорт CalendarComponent из angular2-fullcalendar

import { CalendarComponent } from './angular2-fullcalendar/src/calendar/calendar';

Добавьте CalendarComponent в массив объявлений.

@NgModule({
  imports: [...],
  declarations: [
    CalendarComponent
  ],
  providers: [...],
  bootstrap: [...]
})

5 Теперь пришло время отобразить календарь. Выберите свой собственный компонент. Например, я возьму booking.component.html

<angular2-fullcalendar [options]="calOptions" id="mycal" #mycal></angular2-fullcalendar>

In booking.component.ts

import { Options } from 'fullcalendar'
import * as $ from 'jquery';
import * as moment from "moment

Импортируйте 3 вещи, теперь вы видите важность systemjs.config.js того, что мы сделали ранее. Продолжайте с booking.component.ts в классе,

@ViewChild('mycal', { read: ElementRef }) myCal: ElementRef;

С начала шага 5 в html есть #mycal, то есть 'mycal' в приведенном выше заявлении.

calOptions: any = {};

Инициализация calOptions должна быть пустой, помните, что она не нулевая.

Contructor()
{
var events = [ {
          title: 'All Day Event',
          start: '2016-09-01'
        },
        {
          title: 'Long Event',
          start: '2016-09-07',
          end: '2016-09-10'
        }];
this.UpdateCalendar(events);
}

UpdateCalendar(events)
{
this.calOptions.events = events
$(this.myCal.nativeElement).fullCalendar('addEventSource', events)
}

В приведенном выше конструкторе у нас есть некоторые события для отображения, мы вызываем updateCalendar для обновления событий.

Дополнительные ссылки на это: https://gist.github.com/shah-smit/85aff341cd4a20494910ab2c17e82777/edit

07.03.2017
  • Это сработало как шарм. Сделал мой день. 2 неделя ожидания. наконец закончилось. 07.03.2017

  • 2

    Если вы посмотрите на реализация этого npm вы увидите, что он очень простой. Я бы посоветовал обернуть полный календарь в свой собственный Typescript и самостоятельно обрабатывать события и точки входа FullCalendar, чтобы вы могли воспользоваться всеми преимуществами API.

    Компонент ниже — это тот, который я успешно использовал, он использует JQuery.

    import { Component, ViewContainerRef, Input, Output, EventEmitter } from '@angular/core';
    import { Overlay } from 'angular2-modal'; 
    import * as $ from 'jquery';
    import 'fullcalendar';
    import { Options } from 'fullcalendar';
    import _ from 'lodash';
    
    export interface IEvent {
        title: string;
        description: string;
        start: Date;
        end: Date;
        type: string;
        backgroundColor: string;
        textColor: string;
        className: string;
        borderColor: string;
    }
    
    declare var jQuery: any;
    
    @Component({
        selector: 'calendar',
        template: `<div id='calendar'></div>`
    })
    export class CalendarComponent {
    
        @Input('height')
        public height: number;
    
        @Output('event-click')
        eventClick = new EventEmitter();
    
        @Output('month-changed')
        monthChanged = new EventEmitter();
    
        @Output('date-change')
        dateChange = new EventEmitter();
    
        calElement = null;
    
        addEvents(events: IEvent[]) {
            this.calElement = $('#calendar');
            if (!_.isNil(events)) {
                $('#calendar').fullCalendar('addEventSource', events);
            }
        }
    
        getCurrentMonth() {
            const currentdate = <any>$("#calendar").fullCalendar('getDate');
            return currentdate.month();
        }
    
    
        ngOnInit() {
            this.calElement = $('#calendar');
            let clickFunc = function (calEvent, jsEvent, view) {
                this.eventClick.emit(calEvent);
            };
    
            let eventRender = function (event, element) {
                const args = {event: event, view: element};
                this.dateChange.emit(args);
            };
    
             let viewRender = function (view, element) {
                this.monthChanged.emit(view.intervalStart.month());
            };
    
            let boundRender = eventRender.bind(this);
            let boundClick = clickFunc.bind(this);
            let boundView = viewRender.bind(this);
    
            let options: any = {
                header: {
                    left: 'prev,next today',
                    center: 'title',
                    right: 'month,basicWeek,basicDay listMonth,listWeek,listDay'
                },
    
                defaultView: 'month',
                aspectRatio: 1,
                eventRender: boundRender,
                eventClick: boundClick,
                viewRender: boundView
            };
    
            if (this.height > 0) {
                options.height = this.height;
            }
    
            this.calElement.fullCalendar(options);
        }
    }
    
    27.02.2017
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..