İşte kodlar.AngularJS özel filtresi iki kez çağrıldı ve ikinci aramada giriş verilerini sil
var app = angular.module("nameApp", ["ngRoute"]);
app.controller("ctrlname", function ($scope, $http, $filter, apiKey, apiUrl) {
$scope.data = {};
$scope.currentPage = 1;
$scope.pageSize = 5;
});
$ scope.data, bir HTTP GET isteğinden bir dizi veri içerecektir. Aşağıda, sonuçların sayfalandırılması amacıyla özel bir filtre kodu verilmiştir. Temel olarak, bu, sonuçları yalnızca 5 ile sınırlayacaktır. Sayfalandırma düğmelerinin $ scope.currentPage değerini güncelleyeceği.
app.filter("limitResults", function ($filter, $log) {
return function (data, page, size) {
if (angular.isArray(data) & angular.isNumber(page) && angular.isNumber(size)) {
var startPage = (page - 1) * size;
if (data.length < startPage) {
return [];
} else {
$log.info(data);
$log.info(page);
$log.info(size);
$log.info(startPage);
return $filter("limitTo")(data.splice(startPage), size);
}
} else {
return data;
}
}
});
Verileri işleyen HTML sayfası budur.
<div class="row resultItems" ng-repeat="video in data.videos | limitResults:currentPage:pageSize">
<div class="col-sm-3 testing">
<img ng-src="{{video.snippet.thumbnails.default.url}}">
</div>
<div class="col-sm-9 testing">
<h5>
{{video.snippet.title}}
</h5>
<p>
{{video.snippet.channelTitle}}
</p>
<p>
{{video.snippet.description}}
</p>
</div>
</div>
Ben filtre uygulandığında gerçekten ne olacağını görmek amacıyla özel filtresinde $ log.info kod birkaç satır koydu. Filtre, normal bir davranış olan iki kez çalışır.
Kafa karıştırıcı bulduğum şey, özel filtre ilk kez çalıştırıldığında, $ log.info (veri) bir HTTP GET çağrısından alınan orijinal verileri konsola kaydeder. Ancak, özel filtre ikinci kez çalıştırıldığında, $ log.info (data), konsola boş bir dizi kaydeder.
"$ log.info (data); $ log.info (sayfa); $ log.info (size);" konsola giriş yapın, ikinci IF ifadesinin (if (data.length < startPage)) DOĞRU ve filtreye (return $ filter ("limitTo")) (data.splice (startPage), boyut) olarak değerlendirildiği açıktır. ;) uygulanır.
Özel filtreye iletilen veriler olan dizinin, filtre ikinci kez çalıştırıldığında neden boşaltılacağını anlamıyorum.
deneyin da 'data.length'' startPage' yapıp. –
Sanırım filtre ifadesini değiştirmeniz gerekiyor. $ filter ("limitTo") döndürün (data, size, startPage); –