Sono totalmente nuovo per angularjs e ionico. Provo a memorizzare 4 valori che ricevo da una chiamata di fabbrica in 4 variabili che ho bisogno di usare come parametri per la mia chiamata http http in un'altra funzione:Angularjs: memorizza i dati in variabili da una chiamata di fabbrica da utilizzare in un'altra chiamata di fabbrica
ecco le 4 variabili definite all'inizio del mio controller:
var firstId;
var firstTimestamp;
var lastId;
var lastTimestamp;
ricevo i dati dalla seguente chiamata alla mia fabbrica e assegnare i dati alle variabili:
ContentFactory.getAlbums().then(function(albums){
$scope.albums = albums;
firstId = albums.first_id;
firstTimestamp = albums.first_timestamp;
lastId = albums.last_id;
lastTimestamp = albums.last_timestamp;
});
cerco quindi di utilizzare queste variabili come parametri per un'altra chiamata alla mia fabbrica (loadOlderAlbums è chiamato nella vista):
$scope.loadOlderAlbums = function(lastId, lastTimestamp) {
ContentFactory.getOlderAlbums(lastId, lastTimestamp).then(function(albums){
$scope.albums = $scope.albums.concat(albums);
$scope.$broadcast('scroll.infiniteScrollComplete');
});
};
Le variabili lastId & lastTimestamp sono indefiniti al momento del check la mia fabbrica:
getOlderAlbums : function(lastId, lastTimestamp){
console.log(lastId); // lastId is undefined
return $http.get('http://api.domain.xxx/albums/city/1? &direction=before&id=' + lastId + '&time=' + lastTimestamp + '&api_key=******&lang=en').then(function(response) {
albums = response.data;
return albums;
});
}
nella console vedo il seguente errore:
GET http://api.domain.xxx/albums/city/1?&direction=before&id=undefined&time=undefined&api_key=***&lang=en 500 (Internal Server Error)
perché id & tempo sono indefiniti.
qui è il controller completo:
.controller('PicturesCtrl', function($scope, $ionicLoading, ContentFactory) {
$scope.albums = [];
var firstId;
var firstTimestamp;
var lastId;
var lastTimestamp;
ContentFactory.getAlbums().then(function(albums){
$scope.albums = albums;
firstId = albums.first_id;
firstTimestamp = albums.first_timestamp;
lastId = albums.last_id;
lastTimestamp = albums.last_timestamp;
// console.log(firstId); -> values are correctly stored
// console.log(firstTimestamp); -> values are correctly stored
// console.log(lastId); -> values are correctly stored
// console.log(lastTimestamp); -> values are correctly stored
});
$scope.loadOlderAlbums = function(lastId, lastTimestamp) {
ContentFactory.getOlderAlbums(lastId, lastTimestamp).then(function(albums){
$scope.albums = $scope.albums.concat(albums);
$scope.$broadcast('scroll.infiniteScrollComplete');
});
};
})
e la fabbrica:
.factory('ContentFactory', function($http) {
var albums = [];
return {
getAlbums : function(){
return $http.get('http://api.domain.xxx/albums/city/1?lang=en&api_key=***').then(function(response) {
albums = response.data;
return albums;
});
},
getOlderAlbums : function(lastId, lastTimestamp){
console.log(lastId); // lastId is undefined
return $http.get('http://api.domain.xxx/albums/city/1?&direction=before&id=' + lastId + '&time=' + lastTimestamp + '&api_key=***&lang=en').then(function(response) {
albums = response.data;
return albums;
});
}
}
})
Qualsiasi aiuto per capire il motivo per cui il valore delle variabili non sono passati alla seconda chiamata fabbrica sono molto apprezzati . La sua probabilmente un problema di logica come io sono un newbie totale;)
UPDATE:
Di seguito riportiamo una risposta campione che ho ricevuto dal mio primo $ http GET chiamare Content.Factory.getAlbums
{
"city_id": 1,
"total_pages": 199,
"total_results": 3977,
"first_id": 15448,
"first_timestamp": 1437230820,
"results": [
{
"album_id": "15448",
"title": "MAD pres. Splash The Madness Party at Aftermoon",
"description": "The MAD crew is back and returned to Aftermoon for a night of Melbourne Bounce, Hip Hop, Big Room, Electro- and Progressive House. At the decks were Dam-Sib-Dao, Beatender, Madz Mellow & Odyszey, supported by Mc Ben10.",
"photographer_id": "8",
"photographer_name": "ploy",
"image_count": "88",
"cover_image": "5dd26da7f37da641d775568d2e98ae44.jpg",
"date": "2015-07-18 21:47:00",
"location_id": "705",
"location_name": "Aftermoon"
},
{
"album_id": "15446",
"title": "Superhero Charity Party at KU DÉ TA Bangkok",
"description": "KU DÉ TA Bangkok and the charity organisation \"Habitat for Humanity Thailand\" joined forces for the SUPERHERO “CHARITY PARTY\". Habitat for Humanity Thailand improves the quality of Thai people’s lives through building homes and transforming communities. Entry is Free, but there guests are invited to do a FREE-WILL DONATION of which 100% will go to Habitat for Humanity Thailand to build houses under the program “Make Her Day” in Pathumthani.",
"photographer_id": "15",
"photographer_name": "win",
"image_count": "176",
"cover_image": "742a0065d046418041175ff8005d7174.jpg",
"date": "2015-07-18 18:46:00",
"location_id": "809",
"location_name": "KU DÉ TA"
}
],
"last_id": 15427,
"last_timestamp": 1437062520
}
Il $ scope.loadOlderAlbums è chiamato a mio avviso (ionica infinite scroll)
<ion-infinite-scroll
on-infinite="loadOlderAlbums()"
distance="1%">
</ion-infinite-scroll>
$ scope.album viene effettivamente caricato? Sarebbe d'aiuto se potessi mostrarci cosa viene effettivamente caricato in $ scope.Album. –
Dove stai effettivamente chiamando '$ scope.loadOlderAlbums()'? Sarebbe il primo posto da cercare se gli argomenti non sono definiti quando lo chiami – charlietfl
Installa batarang in modo che tu possa esaminare e confrontare gli ambiti. –