Фильтр ngRepeat на основе переменной области видимости
У меня есть следующее использование ng-repeat для отображения сообщений в блоге:
data-ng-repeat="post in posts | filter: {category: filterCategory} | limitTo:12 ">
"filterCategory" - это переменная области видимости, которую я изменяю с помощью ng-click для набора элементов списка:
<li class="filter" ng-repeat="post in (posts | unique: 'category._id' )" ng-click="setFilterCategory(post.category._id)">
контролируется следующим:
$scope.setFilterCategory = function(id) {
$scope.filterCategory = id;
}
Проблема заключается в том, что когда пользователь нажимает на один из этих элементов списка и setFilterCategory() изменяет filterCategory в области действия, на мгновение отображаются все сообщения (как если бы фильтров не было), затем фильтр применяется. Я хотел бы избежать этого перехода и перейти прямо от предыдущего фильтра к следующему. Что я могу сделать?
Я предполагаю, что это связано с циклом дайджеста, но я недостаточно опытен, чтобы точно сказать, что я должен изменить, если что-нибудь.
Редактировать № 1:
Я пытался воспроизвести на скрипке ( http://jsfiddle.net/igorauad/w4mkny0e/), но безуспешно. В этой скрипке все работает нормально, а в моем приложении это занимает больше времени. Я не знаю, если это имеет значение, но в моем приложении я загружаю сообщения из ресурса, в то время как в скрипте они статически объявлены.
1 ответ
Попробуйте с этим, если у вас проблема с областью с задержкой.
$scope.setFilterCategory = function(id) {
$scope.$apply(function(){
$scope.filterCategory = id;
});
}
если вы все еще видите проблему, вы можете создать plunker или JSfiddle или любой другой