У меня есть фильтр с большим количеством логики в сочетании с большим количеством данных. Это займет несколько секунд, пока это не будет сделано. Я хочу показать символ загрузки, который указывает, что фильтр работает.Проверить, когда фильтр сделан, угловой
Я попытался это:
У меня есть нг-шоу на мой символ загрузки в моей разметке. Я включаю свойство в начале в моем фильтре и затем выключаю его в конце.
Это не работает. Свойство никогда не будет установлено в true. Есть ли лучший подход к этому?
angular.module('clientApp')
.filter('matchPositions', function ($filter, CommonFactory) {
return function (actions, firstLevels, secondLevels, objectTypes, searchText) {
var filtered = [];
CommonFactory.filterLoading = true;
//logic here
CommonFactory.filterLoading = false;
return filtered;
};
});
Контроллер:
angular.module('clientApp')
.controller('ActionStateCtrl', function($scope, CommonFactory){
$scope.filterLoading = CommonFactory.filterLoading;
});
Markup
<i ng-show="filterLoading" class="fa fa-spinner fa-spin"></i>
фильтров являются синхронными функциями, то есть вы не можете обновить область в начале и в конце функции фильтра, потому что дайджеста не будет работать до тех пор, пока не выйдет из фильтра. К сожалению, вы также не можете вернуть обещание. Вместо использования фильтра выполняйте тяжелый подъем в контроллере (или, еще лучше, службу), и когда данные готовы, установите его в область видимости. –
фильтры работают очень часто, я не думаю, что это хорошая идея запустить фильтр, который занимает несколько секунд (и замораживание ui) – eladcon
@YairTavor Итак, если я просто скопирую код в службу вместо этого и использую тот же подход с настройкой загрузки значение в начале и конце функции будет работать? – Per