2017-02-01 12 views
2

Ошибка:Uncaught TypeError: Не удается прочитать свойство «метки» неопределенных, когда нет данных в графах

morris.min.js:6 Uncaught TypeError: Cannot read property 'label' of undefined 
at d.b.Bar.d.hoverContentForRow (morris.min.js:6) 
at d.b.Bar.d.onHoverMove (morris.min.js:6) 
at morris.min.js:6 
at d.b.EventEmitter.a.fire (morris.min.js:6) 
at HTMLDivElement.<anonymous> (morris.min.js:6) 
at HTMLDivElement.dispatch (jquery.min.js?v=1.6.10:3) 
at HTMLDivElement.r.handle (jquery.min.js?v=1.6.10:3) 
  • ошибки появляются, когда данные в графах равна нулю.
  • , как я могу решить эту проблему

ошибка гистограмма

код

расслоения плотной
var httpRequest = $http({ 
    method: 'GET', 
    url: root_url, 
}).success(function(json3, status) { 
    $scope.res3 = json3.data; 


    Morris.Bar({ 
    element: 'chart_priority', 
    data: json3.data, // use returned data to plot the graph, 
    xkey: 'priority', 
    ykeys: ['value'], 
    labels: ['Logs'], 
    hideHover: 'auto', 
    resize: true, 
    // 
    }); 
}); 

Моррис JS, где ошибки были выброшены

 d.prototype.hoverContentForRow = function(a) { 
     var b, c, d, e, f, g, h, i; 
     for (d = this.data[a], 
     b = "<div class='morris-hover-row-label'>" + d.label + "</div>", 
     i = d.y, 
     c = g = 0, 
     h = i.length; h > g; c = ++g) 
      f = i[c], 
      b += "<div class='morris-hover-point' style='color: " + this.colorFor(d, c, "label") + "'>\n " + this.options.labels[c] + ":\n " + this.yLabelFormat(f) + "\n</div>"; 
     return "function" == typeof this.options.hoverCallback && (b = this.options.hoverCallback(a, this.options, b, d.src)), 
     e = this.left + (a + .5) * this.width/this.data.length, 
     [b, e] 
    } 
    , 
  • решения Мне нужно, как решить проблему с неопределенной меткой в ​​morris js.

  • когда данные для определенного вызова ajax равны нулю.

решение я также попытался

There are few more things here. 

Позволяет взять под хронологию событий.

Первый раз Morris.Line визуализируются с надлежащей .data через AJAX Второй раз, когда объект данных пуст, диаграмма полностью не-годные к употреблению третий раз, когда мы оказываем на ту же графику с данными через AJAX. Ничего не произошло. Как вы уже сказали, я могу справиться с этим в пользовательском интерфейсе. Каждый, кто реализует или сталкивается с такой ситуацией, должен сам реализовать это сообщение заполнителя. Вместо этого, если мы сможем справиться с этим в самой Библиотеке, каждый может получить от нее выгоду, а библиотека будет более защитной.

Едет с заполнителем подходом

Первого раза, Morris.Line визуализируется с данными из AJAX во второй раз, данные пуст. Вместо вызова .setData() скрыть элемент div, который отображается/управляется Morris и показывает сообщение-заполнитель с использованием span. В третий раз, когда данные верны, удалите диапазон и повторно отрисуйте Morris.Line Я бы рекомендовал реализовать эту функцию в самой библиотеке, чтобы библиотека была более защищена от таких проблем времени выполнения.

+0

Какой версии Морриса вы используете? Эта проблема была решена в последней версии 0.51 (cf [Пустые данные заставляют диаграмму разбиваться на # 142] (https://github.com/morrisjs/morris.js/issues/142)). – krlzlx

ответ

1

Решения, которое работало для меня

   method: 'GET', 
       url: root_url 
      }).success(function (json3, status) { 
       $scope.res3 = json3.data; 


       if(json3.length==0 ||json3.data==undefined) 
       { 
        // alert("data undefined"); 
        $("#chart_priority").parent().attr("class","hide"); 
         $("#prioritys").hide(); 
        var priority_graph=[ { label:"Logs", value:0 } ]; 
       } 
       else 
       { 
        $("#chart_priority").parent().attr("class","show"); 

        var priority_graphs=json3.data; 

      } 
       Morris.Bar({ 
       element: 'chart_priority', 
       data:json3.data?priority_graphs:priority_graph, 
       //data:json3.data, 
       label:'Logs', 
       xkey: 'priority', 
       ykeys: ['value'], 
       labels: ['Logs'], 

       });