AngularJS + Fullcalendar send error TypeError: Cannot read property '__id' of undefined

耗尽温柔 提交于 2020-01-02 04:07:05

问题


im using angular-ui-calendar in my website. In the controller, i have writed this:

    define(['underscore'], function (_) {
    "use strict";

    var SearchController = function ($scope, $location, OrdersService, UsersService) {

        /* config object */
        $scope.uiConfig = {
            calendar: {
                height: 450,
                editable: true,
                firstDay: 0,
                monthNames: ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'],
                monthNamesShort: ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'],
                dayNames: ['Domingo', 'Lunes', 'Martes', 'Miercoles', 'Jueves', 'Viernes', 'Sabado'],
                dayNamesShort: ['Dom', 'Lun', 'Mar', 'Mie', 'Jue', 'Vie', 'Sab'],
                header: {
                    left: '',
                    center: 'title',
                    right: ''
                }
            }
        };
        $scope.eventSources = [$scope.events];

        var getTecnicians = function () {
            UsersService.getTechs().then(function (techs) {
                $scope.technicians = techs;
            });
        };

        var search = function () {
            var searchObject = $scope.$$childHead.searchForm;
            UsersService.getCurrentStatus(searchObject.technician._id, searchObject.selectedStartDate).then(function (result) {
                $scope.states = result[0].states;
                for (var i = 0; i < $scope.states.length; i++) {
                    var event = {};
                    if (i === $scope.states.length - 1) {
                        event = {
                            title: $scope.states[i].status,
                            start: $scope.states[i].date,
                            allday: true
                        };
                    } else {
                        event = {
                            title: $scope.states[i].status,
                            start: $scope.states[i].date,
                            end: $scope.states[i + 1].date
                        };
                    }
                    $scope.events.push(event)
                }
                if (result) {
                    $scope.haveData = true;
                }
            });
        };

        var init = function () {
            $scope.search = search;
            $scope.getTecnicians = getTecnicians();
            $scope.haveData = false;
            $scope.events = [];
        };
        init();
    };

    SearchController.$inject = ["$scope", "$location", "OrdersService", "UsersService"];

    return SearchController;
});

When i do click in a button i do a get request and get data from server, process it and generate events objets and put in my scope.

When i finish it, calendar show me this error:

ypeError: Cannot read property '__id' of undefined
    at sourcesFingerprint (http://localhost:8000/bower_components/angular-ui-calendar/src/calendar.js:48:24)
    at Object.changeWatcher.getTokens (http://localhost:8000/bower_components/angular-ui-calendar/src/calendar.js:88:21)
    at Scope.$get.Scope.$digest (http://localhost:8000/bower_components/angular/angular.js:12243:40)
    at Scope.$get.Scope.$apply (http://localhost:8000/bower_components/angular/angular.js:12516:24)
    at done (http://localhost:8000/bower_components/angular/angular.js:8204:45)
    at completeRequest (http://localhost:8000/bower_components/angular/angular.js:8412:7)
    at XMLHttpRequest.xhr.onreadystatechange (http://localhost:8000/bower_components/angular/angular.js:8351:11) 

Need i to put an _id on events..?


回答1:


I got the same error, one way to fix it is, initiliaze the event array $scope.events=[] and then make the http request




回答2:


Using this reference:

searchObject.technician.__id

without defining searchObject.technician is the issue.




回答3:


This is error from ui-calendar(here). Did you add the ng-model attribute for ui-calendar?

<div ui-calendar ng-model="eventSources"></div>

Also, after init(), It seems to be $scope.events is a empty array. So I think you can pass it directly.

$scope.eventSources = $scope.events; // this is an array.



回答4:


I ran into the same problem. It comes down to the order in which you define everything. To be safe, your better off declaring your event sources last.

Html:

<div ui-calendar ng-model="eventSources"></div>

Controller:

$scope.events = [
    {title: 'Long Event',start: new Date()}
];
$scope.eventSources = [$scope.events];


来源:https://stackoverflow.com/questions/24181544/angularjs-fullcalendar-send-error-typeerror-cannot-read-property-id-of-un

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!