2015-07-01 3 views
1

Я пытаюсь захватить событие click на диаграмме с разбивкой по nvd3. Я могу захватить всплывающие подсказки всплывающей подсказки. Я хочу зафиксировать событие click и получить информацию о клике. Пожалуйста помоги. PLUNKER_LINKnvd3 захват события клика на диаграмме с разбивкой по областям

мой вариант график:

chart: { 
       type: 'stackedAreaChart', 
       height: 450, 
       x: function (d) { return d[0]; }, 
       y: function (d) { return d[1]; }, 
       showValues: true, 
       valueFormat: function (d) { return d3.format(',.4f')(d); }, 
       dispatch: { 
        tooltipShow: function (e) { console.log('! tooltip SHOW !') }, 
        tooltipHide: function (e) { console.log('! tooltip HIDE !') }, 
        beforeUpdate: function (e) { console.log('! before UPDATE !') }, 
        elementClick: function (e) { alert('clicked');} 

       } 
      } 
     }; 
+0

Вы поняли это? Вы используете директивы angularjs-nvd3 not angularjs-nvd3. – ackuser

ответ

1

Вам нужно обернуть dispatch блок в stacked блоке:

stacked: { 
    dispatch: { 
     tooltipShow: function (e) { console.log('! tooltip SHOW !') }, 
     tooltipHide: function (e) { console.log('! tooltip HIDE !') }, 
     beforeUpdate: function (e) { console.log('! before UPDATE !') }, 
     elementClick: function (e) { alert('clicked');} 
    } 
} 

Но, делая это по-прежнему не будет в состоянии получить elementClick , потому что слой сложенной диаграммы просто не отправит его. Вместо этого вы можете получить событие areaClick, но он запускается только при нажатии внутри уложенной области.

Поэтому я бы рекомендовал вам перехватить события отправки с «интерактивного» слоя. Просто сделайте это так:

chart: { 
    type: 'stackedAreaChart', 
    ... 
    interactiveLayer: { 
     dispatch: { 
      elementMousemove: function(e) { 
       console.log(e.mouseX + " " + e.mouseY + " " + e.pointXValue); 
      }, 
      elementClick: function(e) { 
       console.log(e.mouseX + " " + e.mouseY + " " + e.pointXValue); 
      } 
     } 
    } 
} 
+0

Если вы используете события интерактивного слоя, вы не смогли получить информацию о точках, такую ​​как метка, серия и т. Д. –

+0

@SaeidZebardast, конечно, вы можете - это не имеет никакого отношения к интерактивный слой. Просто объявите атрибут api в теге HTML nvd3, и вы сможете получить доступ к вашему объекту диаграммы и серии данных в JS. например HTML ''; и JS 'var _chart = $ scope.chartApi.getScope(). chart; var pointIndex = nv.interactiveBisect ($ scope.data [0] .values, e.pointXValue, _chart.x()); ' – mindex