javascript - AngularJS - ui.calendar 类型错误 : Cannot read property 'length' of undefined

标签 javascript jquery angularjs calendar

我正在创建一个带有完整日历的日历,它从外部 json 文件中提取事件。我收到以下错误;

TypeError: Cannot read property 'length' of undefined
at Object.changeWatcher.getTokens (calendar.js:98)
at n.a.$get.n.$digest (angular.js:14300)
at n.a.$get.n.$apply (angular.js:14571)
at angular.js:1455
at Object.e [as invoke] (angular.js:4203)
at d (angular.js:1453)
at uc (angular.js:1473)
at Jd (angular.js:1367)
at HTMLDocument.<anonymous> (angular.js:26304)
at n.Callbacks.j (jquery.js:3099)

在我的 angularJS 应用程序上。

此刻我的事件源看起来像这样;

[ [ { "title": "Public Holiday", "start": "2015-09-07", "allDay": true },
{ "title": "Public Holiday", "start": "2015-09-08", "allDay": true } ] ]

我相信这是真的,但因为我也能够在其上运行 .length 函数。但是我不太确定我哪里出错了,非常感谢任何帮助。

Controller .js

var app = angular.module('app',['ui.calendar']);
app.controller('mainController',function($scope,cacheFactory,$interval,holiday){
holiday.allHolidays(function(data){

    var len = data.data.length;
    var friendArray = [];

    for(var i = 0; i < len; i++){

        if(data.data[i].array_phasedescription1stline__tspending_jobandphase == 'Public Holiday'){

            friendArray.push({
                title: data.data[i].array_phasedescription1stline__tspending_jobandphase,
                start: data.data[i].tspending_timedate,
                allDay: true
            });
        }
    }
    $scope.events = [friendArray];
});

$scope.calOptions = {
    editable: true,
    header: {
        left: 'prev',
        center: 'title',
        right: 'next'
    }
}
});

工厂.js

app.factory('holiday',function($http){
return {
   allHolidays: function(callback){
       $http.get('schedule.json').success(callback);
   }

} });

index.html

<body ng-app="app">
<div ng-controller="mainController">
    <div class="calendar" ui-calendar="calOptions" ng-model="events"></div>
    {{ events | json}}
</div>
</body>

最佳答案

您定义$scope.events为时已晚。如果 Controller 已启动,但在处理 ui-calendar 指令时事件源变量不是,则会触发错误。可能是一个错误或一个功能:)

试试这个:

var app = angular.module('app', ['ui.calendar']);

app.controller('mainController', function($scope, cacheFactory, $interval, holiday) {

  // Event sources array is created here 
  $scope.events = [];

  $scope.calOptions = {
    editable: true,
    header: {
      left: 'prev',
      center: 'title',
      right: 'next'
    }
  }

  holiday.allHolidays(function (data) {
    var len = data.data.length;
    var friendArray = [];

    for(var i = 0; i < len; i++){
      if(data.data[i].array_phasedescription1stline__tspending_jobandphase == 'Public Holiday'){
        friendArray.push({
          title: data.data[i].array_phasedescription1stline__tspending_jobandphase,
          start: data.data[i].tspending_timedate,
          allDay: true
        });
      }
    }

    // We don't create the array here, we modify it, triggering the watch
    $scope.events.push(friendArray);
  });
});

关于javascript - AngularJS - ui.calendar 类型错误 : Cannot read property 'length' of undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32909441/

相关文章:

javascript - 使用 javascript 为 chrome 扩展截取屏幕截图

javascript - 在 Node 上使用 PDF-LIB 加载 PDF 文档给出 "No PDF header found"

javascript - 如何使用 Selenium 检查 javascript 应用程序中的内存泄漏?

jquery - 如何使 Select2 4.0 可排序?

jquery - 使用 jQuery 动态创建 div

javascript - 比较两个 JSON 文件时出现未定义问题

javascript - 如何知道所有 $http 调用是否结束 - AngularJS

javascript - 在 Typescript 中如何设置一个新类作为原型(prototype)?

javascript - window.location.href 在弹出窗口中不起作用

angularjs - 将 Angular 4 与外部 Bootstrap HTML 模板集成