2016-04-05 56 views
8

我对Angular 2相当陌生,并试图掌握如何将Angular 2与现有的Javascript UI框架库集成。如何在Angular 2中使用FullCalendar

现在我试图玩jQuery插件http://fullcalendar.io 或者实际上我想使用名为Scheduler的高级附加组件。

但是我创建了Plunker一个简单的例子...

随意使用它,并开导我如何使它显示以及如何对点击响应特定事件。

https://plnkr.co/edit/eMK6Iy

... FullCalendarComponent当然需要修改的部分。问题是我不知道如何。

import {Component} from 'angular2/core'; 

@Component({ 
    selector: 'full-calendar', 
    template: '<p>Here I would like to see a calendar</p>' 
}) 

export class FullCalendarComponent { } 
+1

PrimeNG与称为Schedule Component的FullCalendar集成。 http://www.primefaces.org/primeng/#/schedule组件的代码是开源的https://github.com/primefaces/primeng/blob/master/components/schedule/schedule.ts –

+0

啊,那看起来是一个很好的起点。其实我需要使用名为Scheduler的插件。我注意到,你似乎是与这些briljant组件一起工作的人。所以如果你有一段时间了。随意添加对Scheduler插件的支持:) –

+0

谢谢,调度程序模块似乎是一个商业插件,所以不确定我们如何将它集成到PrimeNG中。 –

回答

7

这是我设法使Scheduler在Angular2项目中工作的方式。 我开始使用由PrimeNG创建的称为Schedule的组件,如Cagatay Civici上面的注释中所建议的。

我不得不像下面那样修改文件scheduler.component.ts。

export class Scheduler { 
// Support for Scheduler 
@Input() resources: any[]; 
@Input() resourceAreaWidth: string;    
@Input() resourceLabelText: string; 
// End Support for Scheduler 

// Added functionality 
@Input() slotLabelFormat: any; 
@Input() titleFormat: any; 
@Input() eventBackgroundColor: any; 
// End added properties 

@Input() events: any[]; 
............ 
............ 
ngAfterViewInit() { 
    this.schedule = jQuery(this.el.nativeElement.children[0]); 
    this.schedule.fullCalendar({ 
     resources: this.resources, 
     resourceAreaWidth: this.resourceAreaWidth, 
     resourceLabelText: this.resourceLabelText, 
     titleFormat: this.titleFormat, 
     slotLabelFormat: this.slotLabelFormat, 
     eventBackgroundColor: this.eventBackgroundColor, 
     theme: true, 
     header: this.header, 
........... 

然后,我必须将fullcalendar和scheduler的css和脚本添加到index.html。

+0

你是如何使用这个调度程序的(在答案中发布的):像一个指令,或者以某种方式在html模板中? – meorfi

+0

我发现如何使用它:)谢谢。顺便说一句:当切换到周视图时,你能够在第一列显示资源吗? – meorfi

+0

左列中的资源可用,但当我测试切换到周视图时,事件消失。然而,为了我的目的,我对周视图不感兴趣,并且只有有限的时间来调查问题。我希望你能解决它! –

0

开始,一些准备在JavaScript中的目录:

jQuery的ui.min.js

jquery.min.js

fullcalendar.js

calendar.js

angular.js

bootstrap.js

文件将在CSS目录需要:

fullcalendar.css

bootstrap.css

现在创建控制器处理数据和事件: -

angular.module('myCalendarApp', ['ui.calendar']); 
function CalendarCtrl($scope, $http) { 

    var date = new Date(); 
    var d = date.getDate(); 
    var m = date.getMonth(); 
    var y = date.getFullYear(); 
    var currentView = "month"; 


    //event source that pulls from google.com 
    $scope.eventSource = { 
      url: "http://www.google.com/calendar/feeds/usa__en%40holiday.calendar.google.com/public/basic", 
      className: 'gcal-event',   // an option! 
      currentTimezone: 'America/Chicago' // an option! 
    }; 


    //This will call onLoad and you can assign the values the way you want to the calendar 
    //here DataRetriever.jsp will give me array of JSON data generated from the database data 
    $http.get('DataRetriever.jsp').success(function(data) { 
     for(var i = 0; i < data.length; i++) 
     { 
      $scope.events[i] = {id:data[i].id, title: data[i].task,start: new Date(data[i].start), end: new Date(data[i].end),allDay: false}; 
     } 
    }); 

    /* 
    //to explicitly add events to the calendar 
    //you can add the events in following ways 
    $scope.events = [ 
     {title: 'All Day Event',start: new Date('Thu Oct 17 2013 09:00:00 GMT+0530 (IST)')}, 
     {title: 'Long Event',start: new Date('Thu Oct 17 2013 10:00:00 GMT+0530 (IST)'),end: new Date('Thu Oct 17 2013 17:00:00 GMT+0530 (IST)')}, 
     {id: 999,title: 'Repeating Event',start: new Date('Thu Oct 17 2013 09:00:00 GMT+0530 (IST)'),allDay: false}, 
     {id: 999,title: 'Repeating Event',start: new Date(y, m, d + 4, 16, 0),allDay: false}, 
     {title: 'Birthday Party',start: new Date(y, m, d + 1, 19, 0),end: new Date(y, m, d + 1, 22, 30),allDay: false}, 
     {title: 'Click for Google',start: new Date(y, m, 28),end: new Date(y, m, 29),url: 'http://google.com/'} 
    ]; 
    //we don't need it right now*/ 


    //with this you can handle the events that generated by clicking the day(empty spot) in the calendar 
    $scope.dayClick = function(date, allDay, jsEvent, view){ 
     $scope.$apply(function(){ 
      $scope.alertMessage = ('Day Clicked ' + date); 
     }); 
    }; 


    //with this you can handle the events that generated by droping any event to different position in the calendar 
    $scope.alertOnDrop = function(event, dayDelta, minuteDelta, allDay, revertFunc, jsEvent, ui, view){ 
     $scope.$apply(function(){ 
      $scope.alertMessage = ('Event Droped to make dayDelta ' + dayDelta); 
     }); 
    }; 


    //with this you can handle the events that generated by resizing any event to different position in the calendar 
    $scope.alertOnResize = function(event, dayDelta, minuteDelta, revertFunc, jsEvent, ui, view){ 
     $scope.$apply(function(){ 
      $scope.alertMessage = ('Event Resized to make dayDelta ' + minuteDelta); 
     }); 
    }; 

    /* 
    //this code will add new event and remove the event present on index 
    //you can call it explicitly in any method 
     $scope.events.push({ 
     title: 'New Task', 
     start: new Date(y, m, 28), 
     end: new Date(y, m, 29), 
     className: ['newtask'] 
     }); 

    $scope.events.splice(index,1);*/ 


    //with this you can handle the click on the events 
    $scope.eventClick = function(event){   
     $scope.$apply(function(){ 
      $scope.alertMessage = (event.title + ' is clicked'); 
     }); 
    }; 


    //with this you can handle the events that generated by each page render process 
    $scope.renderView = function(view){  
     var date = new Date(view.calendar.getDate()); 
     $scope.currentDate = date.toDateString(); 
     $scope.$apply(function(){ 
      $scope.alertMessage = ('Page render with date '+ $scope.currentDate); 
     }); 
    }; 


    //with this you can handle the events that generated when we change the view i.e. Month, Week and Day 
    $scope.changeView = function(view,calendar) { 
     currentView = view; 
     calendar.fullCalendar('changeView',view); 
     $scope.$apply(function(){ 
      $scope.alertMessage = ('You are looking at '+ currentView); 
     }); 
    }; 


    /* config object */ 
    $scope.uiConfig = { 
     calendar:{ 
     height: 450, 
     editable: true, 
     header:{ 
      left: 'title', 
      center: '', 
      right: 'today prev,next' 
     }, 
     dayClick: $scope.dayClick, 
     eventDrop: $scope.alertOnDrop, 
     eventResize: $scope.alertOnResize, 
     eventClick: $scope.eventClick, 
     viewRender: $scope.renderView 
     }  
    }; 

    /* event sources array*/ 
    $scope.eventSources = [$scope.events, $scope.eventSource, $scope.eventsF]; 
} 

现在,在您的视图文件(JSP,GSP或HTML)添加以下代码: - 这有头之前加入,AngularJS规范(详情经历AngularJS教程)

1 
2 
<html lang="en" ng-app="myCalendarApp" id="top"> 

这将为基本的日历结构提供3个议程按钮。

<div class="btn-toolbar"> 
    <div class="btn-group"> 
     <button class="btn btn-success" ng-click="changeView('agendaDay', myCalendar)">Day</button> 
     <button class="btn btn-success" ng-click="changeView('agendaWeek', myCalendar)">Week</button> 
     <button class="btn btn-success" ng-click="changeView('month', myCalendar)">Month</button> 
    </div> 
</div> 
<div class="calendar" ng-model="eventSources" calendar="myCalendar" config="uiConfig.calendar" ui-calendar="uiConfig.calendar"></div> 

这就是警报消息将显示

<div class="alert-success calAlert" ng-show="alertMessage != undefined && alertMessage != ''"> 
    <h4>{{alertMessage}}</h4> 
</div> 

这将给任务的列表

<ul class="unstyled"> 
    <li ng-repeat="e in events | filter:currentDate"> 
     <div class="alert alert-info"> 
      <a class="close" ng-click="remove($index)"><i class="icon-remove"></i></a> 
      <b> {{e.title}}</b> - {{e.start | date:"MMM dd"}} 
     </div> 
    </li> 
</ul> 
+0

这不是Angular2打字稿 –

4

我创建了一个NPM包当前日期

npm install angular2-fullcalendar --save 

您可以使用选项输入完全自定义fullcalendar组件

退房这里的文档https://github.com/nekken/ng2-fullcalendar

+1

您可以使用angular2提供/添加演示到您的github回购。 –

+1

@SaiKiranMandhala我无法使它与Angular2和SystemJs一起运行。更改为webpack后,我可以加载fullcalendar。但我现在正在努力显示事件... https://github.com/nekken/ng2-fullcalendar/issues/13这是我打开的问题,也许它可以帮助你 – messerbill

相关问题