2013-06-12 2 views
9

мое предположение было не так. в то время как AngularJS, безусловно, замедлял работу, это было не из-за проблемы, описанной ниже. тем не менее, это был ответ флима на мой вопрос - как исключить элемент из углового масштаба - который смог это доказать.Как я могу исключить элемент из угловой области?

Я создаю сайт, который генерирует графики, используя d3 + Raphael из данных AJAX. это приводит к LOT элементов SVG или VML в DOM, в зависимости от того, какой тип диаграммы пользователь выбирает для рендеринга (например, у pie есть несколько строк, строк и стеков).

У меня возникает проблема, когда ввод текста в текстовые поля, контролируемые AngularJS, приводит Firefox к обходу. Я набираю несколько символов, а затем жду 2-3 секунды, чтобы они внезапно появились, затем введите еще несколько и т. Д. (Chrome, похоже, справляется с этим немного лучше.)

, когда нет графического изображения на странице (пользователь не предоставил достаточно данных для того, чтобы они были сгенерированы), редактирование содержимого этих текстовых полей прекрасное. I Предположим, что У AngularJS возникают проблемы при попытке обновить DOM, и есть сотни элементов SVG или VML, которые он должен просматривать.

График, однако, не содержит ничего, что AngularJS нужно беспокоиться о себе. (Есть, однако, элементы пользовательского интерфейса, как до, так и после того, как на графике, что ему необходимо обратить внимание.)

Я могу думать о двух решений:

  1. поставил DIV графа за пределами контроллера AngularJS , и используйте CSS, чтобы расположить его там, где он действительно нужен

  2. tell AngularJS - как-то - невзирая на график DIV; чтобы пропустить его через при сохранении вида и модели в синхронизации

второй вариант кажется предпочтительнее для меня, так как он держит макет документа здравомыслящий/семантический. Есть какой-либо способ сделать это? (или некоторое, даже лучшее решение, о котором я не думал?)

+2

Вы пробовали ng-non-bindale? http://docs.angularjs.org/api/ng.directive:ngNonBindable –

+1

Почему, по вашему мнению, Angular должен просматривать все элементы SVG/VML? Являются ли эти элементы генерируемыми угловыми? Если нет, то Angular не смотрит на них. Угловая только компилирует HTML-документ (DOM) один раз: http://docs.angularjs.org/guide/concepts#startup –

+0

ng-non-bindable - именно то, что я искал! , но это также доказывает, что сказал Марк: Угловая на самом деле медленная из-за SVG/VML, генерируемого Рафаэлем. игнорирование этого блока не помогает. Поскольку проблема не существует в Chrome, а профилировщик Firebug менее информативен, чем Chrome, трудно точно сказать, где происходит замедление ... Я продолжу копать. Я бы очень хотел дать фальшивый полный кредит для ответа на мой первоначальный вопрос. – Ben

ответ

16

Вы пробовали ng-non-bindable? http://docs.angularjs.org/api/ng.directive:ngNonBindable

<ANY ng-non-bindable> 
    ... 
</ANY> 
+0

У меня возникли проблемы с экземпляром CKEditor, который содержал переменные шаблона Liquid. Угловой интерполировал переменные, даже если вход не привязан ни к чему в угловом. Добавление 'ng-non-bindable' исправило это. Спасибо! –

+0

Добро пожаловать! –

Смежные вопросы