加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – ngClick导致D3图表重绘

发布时间:2020-12-17 06:47:50 所属栏目:安全 来源:网络整理
导读:每当我点击其中一个点时,它就会导致图表更新.只有在 nvd3上有一个ngClick指令时才会发生这种情况. element(即使监听器函数什么都不做).如果我删除ngClick,一切都很好. 我正在使用带有angular-nvd3的非常基本的nvd3散点图. 什么可能导致这种奇怪的互动? (此
每当我点击其中一个点时,它就会导致图表更新.只有在< nvd3>上有一个ngClick指令时才会发生这种情况. element(即使监听器函数什么都不做).如果我删除ngClick,一切都很好.

我正在使用带有angular-nvd3的非常基本的nvd3散点图.

什么可能导致这种奇怪的互动?

(此录制的帧率很低,因此很难看到,但每次点击都会重新绘制图表,包括顶部的图表)

Clicking points on a graph

这是一个再现问题的plunker:

http://plnkr.co/edit/F0ZslBaisoHWIp0VcI8o

谢谢!

更新我把它缩小到angular-nvd3内的手表.不知何故,ngClick的存在导致’数据’发生变化.
此行触发刷新:https://github.com/krispo/angular-nvd3/blob/master/dist/angular-nvd3.js#L328
我的代码中没有任何内容可以更改“数据”(也验证了对象是指令之外的相同实例),而且我在angular-nvd3.js中看不到任何可以改变数据的东西……嗯……

UPDATE
这是我的点击事件监听器(它是空的):

controller.handleChartClick = function(event) {
};

和HTML:

<div class="col-sm-10">
    <nvd3 ng-click="observationsCharts.handleChartClick($event)"
              options="observationsCharts.scatterPlotChartOptions"
              data="observationsCharts.scatterPlotChartData"></nvd3>
</div>

解决方法

您是正确的,以下手表导致问题:

// Watching on data changing
 scope.$watch('data',function (newData,oldData) {
  if (newData !== oldData && scope.chart) {

    if (!scope._config.disabled && scope._config.autorefresh) {
        scope._config.refreshDataOnly && scope.chart.update ? scope.chart.update() : scope.api.refresh(); // if wanted to refresh data only,use chart.update method,otherwise use full refresh.
                            }
                        }
                    },scope._config.deepWatchData);

问题是,如果您在此函数中添加日志以查看旧数据和新数据是什么,则数据实际上正在发生变化.

当您单击其中一个点时,nvd3正在为数据添加颜色属性.

旧数据:

[{"key":"Battery Voltage","values":[{"x":1439419440000,"y":90,"series":0},{"x":1439419440000,"y":43,"y":345,{"x":1439167620000,"y":73,"y":42,"y":36,{"x":1440010740000,"y":32,"y":62,"series":0}]}]

新数据:

[{"key":"Battery Voltage","series":0,"color":"#1f77b4"},"series":0}],"color":"#1f77b4","value":90}]

每次单击新点时,颜色属性都会添加到对象中,因此watch函数实际上正在正常运行.

我建议在https://github.com/krispo/angular-nvd3开一个问题

**编辑 – 只是为了澄清,添加ng-click时发生的原因是因为这会强制运行Angular摘要周期,这将触发监视.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读