Не удается прочитать свойство метки неопределенного

Я хочу построить простую гистограмму, используя Chart.js (1.0.2) и angular-chart.js (0.8.5). Я прочитал много других статей об этой проблеме, но ничего не помогло. Итак, дело обстоит так:

Я получаю «данные о доставке» из моего RequestService, которые включают тип, час и количество для каждого типа и часа. Итак, это выглядит примерно так:

Object {hour: "0", type: "9", count: "66"} Object {hour: "0", type: "3", count: "195"}

Затем я выбираю уникальные часы и типы: часы — это мои метки, а тип — серия. После этого я создаю массив данных. Это прекрасно работает, и в результате у меня есть:

$scope.labels: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "17", "18"]

$scope.series: ["0", "2", "3", "4", "6", "7", "8", "9"]

$scope.data: 0: Array[10]1: Array[10]2: Array[10]3: Array[10]4: Array[10]5: Array[10]6: Array[10]7: Array[10]8: Array[10]9: Array[10]10: Array[10]11: Array[10]12: Array[10]17: Array[10]18: Array[10]

Я напечатал эти результаты в командной строке.

Теперь каждый раз, когда я вызываю функцию $scope.getChartData(), я получаю следующую ошибку:

TypeError: Невозможно прочитать метку свойства undefined

Вот код для $scope.getChartData() : http://pastebin.com/7kWQ6W09

Вот вид: http://pastebin.com/0DvDcMBa

Я пробовал несколько раз пример, представленный на странице angular-js github (http://jtblin.github.io/angular-chart.js/). Однако я не понимаю, почему их пример работает довольно хорошо, а мой, который предоставляет точно такие же данные, нет.


person threxx    schedule 03.11.2015    source источник


Ответы (1)


Вы инициализируете метку вне вызова службы, почему бы не попытаться инициализировать после?

Пожалуйста, попробуйте изменить это

    var allData = [];
    $scope.series = [];
    $scope.labels = [];
    $scope.data = [[]];
    RequestService.getShipTypes(nelat, swlat, nelng, swlng, date, analyse)
            .success(function(ships) {

к этому

    RequestService.getShipTypes(nelat, swlat, nelng, swlng, date, analyse)
            .success(function(ships) {
    var allData = [];
    $scope.series = [];
    $scope.labels = [];
    $scope.data = [[]];
person David F.    schedule 03.11.2015
comment
ты не показал как ты вызываешь свой контроллер, все ок? - person David F.; 03.11.2015
comment
да, все остальное в контроллере работает нормально, и я ничего не менял, кроме части гистограммы. Я вызываю getChartData() через кнопку в представлении. - person threxx; 03.11.2015