【问题标题】:Angular UI Calendar / Full Calendar drag event not working (edit) - in chromeAngular UI 日历/完整日历拖动事件不起作用(编辑)-在 chrome 中
【发布时间】:2016-05-26 22:34:56
【问题描述】:

所以我刚刚将使用完整日历的 Angular UI 日历添加到我的应用程序中。我已经使用 Angular UI 日历站点中的示例代码对其进行了初始化:https://angular-ui.github.io/ui-calendar/

我的问题是我无法“拖动”事件。拖动开始永远不会发生。单击事件回调有效,“可编辑”配置选项设置为true,我已经通过文档、Google 和 SO 搜索了 High 和 Low,但没有任何运气。我以我确认的正确顺序加载了以下 js 文件:(注意* jquery [v.2.2.0] 是通过首先显示的 dataTables CDN 打包的)

 <!-- DataTables/JQuery -->
    <script type="text/javascript" src="https://cdn.datatables.net/t/bs-3.3.6/jq-2.2.0,jszip-2.5.0,pdfmake-0.1.18,dt-1.10.11,af-2.1.1,b-1.1.2,b-colvis-1.1.2,b-flash-1.1.2,b-html5-1.1.2,b-print-1.1.2,cr-1.3.1,fc-3.2.1,fh-3.1.1,kt-2.1.1,r-2.0.2,rr-1.1.1,sc-1.4.1,se-1.1.2/datatables.min.js"></script>
    <script type="text/javascript" src="plugins/datatables/dataTables.colResize.js"></script>
    <!-- Bootstrap 3.3.5 -->
    <script type="text/javascript" src="bootstrap/js/bootstrap.min.js"></script>
    <!-- jQuery UI 1.11.4 -->
    <script type="text/javascript" src="plugins/jQueryUI/jquery-ui.js"></script>
    <!-- Growl -->
    <script type="text/javascript" src="plugins/bootstrap-growl-master/jquery.bootstrap-growl.min.js"></script>
    <!-- Bootstrap Switch -->
    <script type="text/javascript" src="plugins/bootstrap-switch/bootstrap-switch.js"></script>
    <!-- Slimscroll -->
    <script type="text/javascript" src="plugins/slimScroll/jquery.slimscroll.min.js"></script>
    <!-- FastClick -->
    <script type="text/javascript" src="plugins/fastclick/fastclick.min.js"></script>
    <!-- Pace Loading -->
    <script type="text/javascript" src="plugins/pace/pace.js"></script>
    <!-- AdminLTE App -->
    <script type="text/javascript" src="bootstrap/js/app.min.js"></script>
    <!-- Ion Slider -->
    <script type="text/javascript" src="plugins/ionslider/ion.rangeSlider.min.js"></script>
    <!-- ANGULAR JS -- MAKE SURE CDN ANGULAR FILES VERSIONS MATCH -->
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.3/angular.min.js"></script>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.3/angular-animate.min.js"></script>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.3/angular-route.js"></script>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.3/angular-resource.js"></script>
    <!-- Angular-Datatables -->
    <script type="text/javascript" src="plugins/datatables/angular-datatables.min.js"></script>
    <!-- Angular-Sortable -->
    <script type="text/javascript" src="plugins/jQueryUI/sortable.js"></script>
    <!-- Angular-UI-Bootstrap -->
    <script type="text/javascript" src="plugins/AngularUI/ui.bootstrap.min.js"></script>
    <!-- Moment -->
    <script type="text/javascript" src="plugins/Moment/moment.min.js"></script>
    <!-- Full Calendar -->
    <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/fullcalendar/2.7.0/fullcalendar.min.js"></script>
    <!-- Angular-UI-Calendar -->
    <script type="text/javascript" src="plugins/AngularUI/calendar.js"></script>
<script type="text/javascript" src="assets/js/Controllers/calendarController.js"></script>

我的日历正在显示,事件正在填充,我可以通过成功更改来操纵模型,但我无法拖动任何事件。更具体地说,我并不是要放弃外部事件,只是将现有事件移到不同的日子。

html: *app 在父页面上声明这是一个 ng-view /// 控制器是通过路由提供者声明的。

    <section class="content-header">
  <h1>Calendar</h1>
  <ol class="breadcrumb">
    <li><a href="#/"><i class="fa fa-dashboard"></i> Home</a></li>
    <li class="active">Calendar</li>
  </ol>
  <div class="row">
    <div class="col-xs-12">
      <div class="box">
                <div class="box-header with-border">
                    <h3 class="box-title">Calendar</h3>
                    <div class="alert-success calAlert" ng-show="alertMessage != undefined && alertMessage != ''">
                    <h4>{{alertMessage}}</h4>
                    </div>
                </div>
        <div class="box-body">
          <div class="calendar" ui-calendar="uiConfig.calendar" class="calendar" ng-model="eventSources"></div> 
                </div>
            </div>
        </div>
    </div>
</section>

渲染视图 => 渲染的日历图片:

任何帮助将不胜感激!

编辑:添加了我的控制器 *与 Angular UI 日历站点中的示例代码相同

app.controller('CalendarController', ['$scope', '$window', '$http', 'DTOptionsBuilder', '$log', '$uibModal', 'uiCalendarConfig', '$compile', '$timeout', function($scope, $window, $http, DTOptionsBuilder, $log, $uibModal, uiCalendarConfig, $compile, $timeout) {
  var date = new Date();
    var d = date.getDate();
    var m = date.getMonth();
    var y = date.getFullYear();

    $scope.changeTo = 'Hungarian';
    /* 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!
    };
    /* event source that contains custom events on the scope */
    $scope.events = [
      {title: 'All Day Event',start: new Date(y, m, 1)},
      {title: 'Long Event',start: new Date(y, m, d - 5),end: new Date(y, m, d - 2)},
      {id: 999,title: 'Repeating Event',start: new Date(y, m, d - 3, 16, 0),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/'}
    ];
    /* event source that calls a function on every view switch */
    $scope.eventsF = function (start, end, timezone, callback) {
      var s = new Date(start).getTime() / 1000;
      var e = new Date(end).getTime() / 1000;
      var m = new Date(start).getMonth();
      var events = [{title: 'Feed Me ' + m,start: s + (50000),end: s + (100000),allDay: false, className: ['customFeed']}];
      callback(events);
    };

    $scope.calEventsExt = {
       color: '#f00',
       textColor: 'yellow',
       events: [
          {type:'party',title: 'Lunch',start: new Date(y, m, d, 12, 0),end: new Date(y, m, d, 14, 0),allDay: false},
          {type:'party',title: 'Lunch 2',start: new Date(y, m, d, 12, 0),end: new Date(y, m, d, 14, 0),allDay: false},
          {type:'party',title: 'Click for Google',start: new Date(y, m, 28),end: new Date(y, m, 29),url: 'http://google.com/'}
        ]
    };
    /* alert on eventClick */
    $scope.alertOnEventClick = function( date, jsEvent, view){
        $scope.alertMessage = (date.title + ' was clicked ');
    };
    /* alert on Drop */
     $scope.alertOnDrop = function(event, delta, revertFunc, jsEvent, ui, view){
       $scope.alertMessage = ('Event Dropped to make dayDelta ' + delta);
    };
    /* alert on Resize */
    $scope.alertOnResize = function(event, delta, revertFunc, jsEvent, ui, view ){
       $scope.alertMessage = ('Event Resized to make dayDelta ' + delta);
    };
    /* add and removes an event source of choice */
    $scope.addRemoveEventSource = function(sources,source) {
      var canAdd = 0;
      angular.forEach(sources,function(value, key){
        if(sources[key] === source){
          sources.splice(key,1);
          canAdd = 1;
        }
      });
      if(canAdd === 0){
        sources.push(source);
      }
    };
    /* add custom event*/
    $scope.addEvent = function() {
      $scope.events.push({
        title: 'Open Sesame',
        start: new Date(y, m, 28),
        end: new Date(y, m, 29),
        className: ['openSesame']
      });
    };
    /* remove event */
    $scope.remove = function(index) {
      $scope.events.splice(index,1);
    };
    /* Change View */
    $scope.changeView = function(view,calendar) {
      uiCalendarConfig.calendars[calendar].fullCalendar('changeView',view);
    };
    /* Change View */
    $scope.renderCalender = function(calendar) {
      $timeout(function() {
        if(uiCalendarConfig.calendars[calendar]){
          uiCalendarConfig.calendars[calendar].fullCalendar('render');
        }
      });
    };
     /* Render Tooltip */
    $scope.eventRender = function( event, element, view ) {
        element.attr({'tooltip': event.title,
                      'tooltip-append-to-body': true});
        $compile(element)($scope);
    };
    /* config object */
    $scope.uiConfig = {
      calendar:{
        height: 450,
        editable: true,
        header:{
          left: 'title',
          center: '',
          right: 'today prev,next'
        },
        eventClick: $scope.alertOnEventClick,
        eventDrop: $scope.alertOnDrop,
        eventResize: $scope.alertOnResize,
        eventRender: $scope.eventRender
      }
    };

    $scope.changeLang = function() {
      if($scope.changeTo === 'Hungarian'){
        $scope.uiConfig.calendar.dayNames = ["Vasárnap", "Hétfő", "Kedd", "Szerda", "Csütörtök", "Péntek", "Szombat"];
        $scope.uiConfig.calendar.dayNamesShort = ["Vas", "Hét", "Kedd", "Sze", "Csüt", "Pén", "Szo"];
        $scope.changeTo= 'English';
      } else {
        $scope.uiConfig.calendar.dayNames = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
        $scope.uiConfig.calendar.dayNamesShort = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
        $scope.changeTo = 'Hungarian';
      }
    };
    /* event sources array*/
    $scope.eventSources = [$scope.events, $scope.eventsF];
    $scope.eventSources2 = [$scope.calEventsExt, $scope.eventsF, $scope.events];
}]);

编辑:我做了一些更广泛的测试,发现拖动只在 chrome 浏览器中失败...Edge、IE、Firefox 和 Opera 可以正常工作,但仍然不知道为什么...

【问题讨论】:

    标签: javascript angularjs jquery-ui fullcalendar


    【解决方案1】:

    我遇到了同样的问题,它与您的计算机触摸屏有关。

    转到 chrome://flags 并禁用“启用触摸事件”

    这对我有用

    来源:https://github.com/angular-ui/ui-calendar/issues/407

    【讨论】:

    • 我有一台触屏电脑。您的建议在所有网站上破坏了我的浏览器的触摸屏......最终仍在搜索
    猜你喜欢
    • 2017-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-06
    相关资源
    最近更新 更多