Фильтры и функции Angular.js в области, которая меняется каждую секунду

Эта проблема. У меня есть таблица записей ($scope.entries), каждая строка (ng-repeat) с 5 столбцами, 2 из этих столбцов имеют собственный фильтр для различных преобразований.

Теперь в той же области у меня есть active_entry($scope.active_entry), которая меняется каждую секунду, из-за этого и того, как работает angular (я думаю), вся область постоянно проверяется, и мои фильтры выполняются.

Это приводит к тому, что Watch Expressions в Batarang со временем зашкаливает.

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

Является ли создание директивы единственным способом создания изолированной области? Будет ли это работать? Что, если мне понадобятся значения из изолированной области позже в контроллере?




Ответы (1)


Вы задаете довольно много вопросов в своем вопросе. Было бы лучше задать их каждому в отдельных вопросах SO.

Каждый раз, когда запускается цикл дайджеста Angular, запускаются все часы и фильтры. Изменение вещей «внутри» Angualar приведет к запуску цикла дайджеста. Как вы меняете $scope.active_entry? Если вы можете изменить его вне Angular, вы сможете делать то, что хотите. Как вы упомянули, вам также придется поместить это свойство в новую дочернюю область (scope: true) или изолировать область (scope: {...}), тогда вы можете вызвать $scope.digest() (после изменения active_entry), чтобы переварить только эту область.

Создание директивы было бы лучшим способом создания изолированной области. Вы можете создать дочернюю область с помощью ng-controller или директивы.

См. также https://groups.google.com/d/topic/angular/1XtEAX93ces/discussion

person Mark Rajcok    schedule 10.04.2013
comment
Это своего рода таймер, поэтому active_entry обновляется каждую секунду с помощью $timeout.. - person fxck; 11.04.2013
comment
Я не понимаю, я создал изолированную область plnkr.co/edit/8UqVXWFTdutIQ4sHDPAe?p= предварительный просмотр и фильтры в родительской области по-прежнему выполняются каждую секунду (проверьте консоль).. - person fxck; 14.04.2013
comment
А, понятно, третий параметр в $timeout и $digest(). - person fxck; 14.04.2013