Угловые кнопки previous / next на странице сведений и маршрутизация через параметры
Я создал этот поршень моего проекта до сих пор.
Моя самая большая проблема связана с кнопками 'Next/Previous' item, его функционирование в некоторой степени, однако есть две проблемы с ним.
Во-первых, по-видимому, существует некоторое несоответствие с фильтрацией данных и индексацией. Чтобы проиллюстрировать это, откройте галерею "живопись" , вы увидите предметы, перечисленные погоду , Как и ожидалось. Однако при перемещении между элементами в детальном представлении они перечислены просто в том порядке, в котором они появляются в объекте json, и подкачка работает только частично.
Список элементов в галерее "чертеж" уже находится в хронологическом порядке в файле json, и поэтому галерея, похоже, работает должным образом.
Во-вторых, способ отображения кнопок prev / next кажется избитым, но это единственный способ, которым я смог заставить его работать до сих пор.
Это мой контроллер для просмотра списка и подробных представлений:
galleryControllers.controller('ArtworkCtrl', ['$scope', '$routeParams', '$http', '$filter', function($scope, $routeParams, $http, $filter) {
$scope.url = $routeParams.artworkUrl;
$http.get('gallery.json').success(function(data) {
// get genre from url
$scope.artworks = $filter('filter')(data, {
genre: $routeParams.artworkGenre
});
var artworks = $scope.artworks;
// get item from url
$scope.artwork = data.filter(function(entry) {
return entry.url === $scope.url;
})[0];
var artwork = $scope.artwork;
var url = $scope.url;
//$scope.orderProp = 'year';
// current artwork
//$scope.currentArtwork = $scope.artworks[currentIndex];
// the index of the selected artwork in the array.
var currentIndex = $scope.artworks.indexOf($scope.artwork);
$scope.prevArtwork = function(currentIndex) {
var prevIndex = currentIndex - 1;
if (prevIndex < 0) {
// move over to the last index, if we already are at the start
prevIndex = $scope.artworks.length - 1;
}
//console.log(artworks[prevIndex].url);
return prevIndex;
}
$scope.nextArtwork = function(currentIndex) {
var nextIndex = currentIndex + 1;
if (nextIndex >= $scope.artworks.length) {
// move over to start if we already were at the end of the list
nextIndex = 0;
}
//console.log(artworks[nextIndex].url);
return nextIndex;
}
});
}]);
1 ответ:
В конце концов я понял это сам, сначала я использовал это, чтобы изменить порядок массива:
artworks.sort(function (a, b) { return b.year.localeCompare(a.year); });
Во-вторых, я изменил свою предыдущую / следующую часть контроллера на эту:
/* previous button */ if (currentIndex > 0) $scope.prevArtwork = Number(currentIndex) - 1; else $scope.prevArtwork = artworks.length - 1; /* next button */ if (currentIndex < artworks.length - 1) $scope.nextArtwork = Number(currentIndex) + 1; else $scope.nextArtwork = 0;
Затем получил доступ к нему в шаблоне следующим образом:
{{artworks[prevArtwork].url}}
Работает отлично, без каких-либо халтурных вещей.