【问题标题】:Exclude div from Angular digest从 Angular 摘要中排除 div
【发布时间】:2014-03-13 23:05:07
【问题描述】:

我有一个带有在 Angular 之外生成的图表的 div。虽然 div 在 ng-repeat 内,但当范围更新时,图表会被清除。有没有办法防止带有图表的 div 被重绘?

这是我的 HTML:

<div ng-repeat="object in objects">
    <span>{{ object.title }}</span>
    <div class="chart"></div> <!-- This is being cleared when object changes -->
</div>

我曾考虑使用 bindonce,但我的数据发生了变化,所以我不能(?)使用它。

需要明确的是,我要更改的只是一个属性,例如object.title。如果整个对象数组被替换,我不认为图表会一直存在。

编辑

在这里写了一个有问题的 JSBin:http://jsbin.com/jijalugu/1/edit?html,js,output

看起来是过滤器导致了问题。我正在使用过滤器将对象拆分为分区(来自this answer)。不知道为什么,没有过滤器也能正常工作。

【问题讨论】:

  • 示波器数据发生变化时重绘图表是不是不能接受?
  • 是的,范围变化频繁,图表渲染时间太长。
  • 您有一个图表或每个对象的图表?
  • 每个对象的图表
  • 嗯...看看这个小提琴:jsfiddle.net/RUfPX 看起来模型更改时它不会清除 div。你的情况有什么不同?

标签: angularjs


【解决方案1】:

您可以使用tracking expression

<div ng-repeat="rows in items | partition:2  track by $index" class="row">
  <div ng-repeat="item in rows">
    <b>{{ item.title }}</b>
    <div id="chart-{{item.title}}" class="chart"></div>
  </div>
</div>

Ben Nadel 有一篇出色的博文 explaining tracking expressions 及其好处:

此功能允许您使用唯一标识符将 JavaScript 对象与 ngRepeat DOM(文档对象模型)节点相关联。有了这个关联,AngularJS 就不会不必要地 $destroy 和重新创建 DOM 节点。这可以带来巨大的性能和用户体验优势。

【讨论】:

  • 我从未对 SO 的回答印象深刻。谢谢!那工作得很好。我将等待 2 天接受您的回答以赏金。
  • 谢谢,很高兴能帮上忙。顺便说一句,那是一个很棒的 JSBin 演示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-30
  • 2020-07-16
  • 2016-03-19
相关资源
最近更新 更多