2015-05-13 4 views
2

У меня есть контроллер, где объект $ scope используется для хранения методов и значений, которые используются только локально в одном контроллере. Существует много таких изменений:

$scope.foo = 'something'; 
$scope.bar = 'something else'; 

... и так далее. Ни одно из этих значений не используется в представлении. Мой вопрос заключается в том, что загрязнение объекта $ scope влияет на производительность? Это хорошая идея, чтобы очистить это, поэтому только значения и методы, необходимые для представления, содержатся в объекте $ scope?

+0

Hm, было бы интересно посмотреть пример контроллера. В угловом режиме контроллеры действительно больше похожи на модели просмотра, поэтому обычно они не будут содержать много, что не используется в представлении. Возможно, вам захочется реорганизовать какую-то логику в сервисы? Проверьте [руководство по угловому стилю] (https://github.com/johnpapa/angular-styleguide), также рассмотрите использование синтаксиса controllerAs вместо использования $ scope alltogether (подробнее об этом в руководстве) :) – JimL

+0

Добавление чего-то к $ scope не создает наблюдателя, который обычно возникает из-за проблем с производительностью, поэтому он не будет заметно влиять на производительность. – rob

+0

Это, конечно, не по теме, но зачем вы ставите значения в область, когда они не используются в представлении? –

ответ

2

Да, загрязнение $scope действительно влияет на производительность, но в зависимости от вашей области действия существует несколько наблюдателей, которые часто меняются, что создаст дополнительные накладные расходы. См this answer, который охватывает ту же точку

Для избежания этой ситуации я предлагаю вам сделать хороший рефакторинга кода

Handle всю логику в контроллере, когда требуется сделать иначе отделить логику от добросовестного использования каждый компонент.

  1. Переместить общий метод (логика), чтобы service/factory/provider, который используется в нескольких месте, так что было бы совместное использование.
  2. Если какое-то значение фиксировано, они не собирается изменить затем переместить их в constant/value
  3. Всякий раз, когда вы чувствуете, как у вас есть тот же логика, которую нужно держать в $scope это само затем переместить эту логику к общему контроллеру. При необходимости можно вводить в текущем объеме контроллера с помощью $controller форсунку

Также см Understanding Of Scope для четкого понимания использования объема

+1

Благодарим за отзыв. Ссылка, которую вы предоставили, которая содержала статью «Понимание областей», была очень полезной. – Dustin

+0

@ Dustin Рад помочь вам, спасибо :-) –

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