我的前提错了。虽然AngularJS肯定会减慢速度,但这并不是由于我在下面描述的问题。然而,对于我的问题 - 如何从Angular范围中排除一个元素 - 它能够证明这一点,这是一个微不足道的答案。
我正在构建一个使用d3 + Raphael从AJAX获取的数据生成图形的网站。这会在DOM中产生大量的SVG或VML元素,具体取决于用户选择呈现的图表类型(例如,饼图很少,行和堆叠条都有很多)。
我遇到了一个问题,即在AngularJS控制的文本字段中输入文本会导致Firefox爬行。我键入了几个字符,然后等待2-3秒让它们突然出现,再输入几个等等(Chrome似乎处理得更好了。)
当页面上没有图形时(用户没有为要生成的图形提供足够的数据),编辑这些文本字段的内容就可以了。我假设 AngularJS在尝试更新DOM时遇到问题,并且需要查看数百个SVG或VML元素。
然而,该图表不包含AngularJS需要担心的任何内容。 (但是,在图表之前和之后都有UI元素需要注意。)我可以想到两个解决方案:
将图形的DIV放在AngularJS控制器之外,并使用CSS将其放置在实际需要的位置
告诉AngularJS - 不知何故 - 永远不要让图表的DIV;在保持视图和模型同步
第二个选项对我来说似乎更合适,因为它使文档布局保持理智/语义。有没有办法做到这一点? (或者我没有想过的一些甚至更好的解决方案?)
答案 0 :(得分:17)
您是否尝试过ng-non-bindable? http://docs.angularjs.org/api/ng.directive:ngNonBindable
<ANY ng-non-bindable>
...
</ANY>