2016-11-06 2 views
0

Ich erstelle eine Ionic App mit der WP Rest API. Ich habe die Postdaten zurückgeschickt, aber ich suche weiterhin nach dem Kategorienamen. Die JSON-Daten für die Posts enthalten nur die Kategorie-ID. Ich versuche auf die Kategorie-ID zuzugreifen und referenziere sie in meinem Controller, um die Kategorien-Daten zu erhalten, um den Kategorienamen über die ID zu erhalten.Wie greife ich auf die verschachtelten Kategorien-Daten zu und referenziere sie in meinem Controller?

My controller looks like this: 
svampeApp.controller('PostCtrl', function ($scope, svampeApi, $stateParams) { 

//Individual Post Controller 
console.log("$stateParams", $stateParams); 

$scope.posts = []; 
$scope.categoryId = []; 

$scope.id = $stateParams.id; 

svampeApi.getPostData($scope.id).then(function (succ) { 
    $scope.posts = succ; 
    $scope.categoryId = succ.categories; 
}, function(err) { 
    console.log('Error: ', err); 
}); 

console.log("Category Object", $scope.categoryId); 

//Getting the category ID to display the category name 
$scope.categories = [];  

svampeApi.getCategoryData($scope.categoryId).then(function (succ) { 
    $scope.categories = succ; 
}, function(err) { 
    console.log('Error: ', err); 
}); 

}); 

Mit dieser Linie soll ich die Kategorie-ID erhalten, wie es in dem Post Objekt gespeichert ist:

$scope.categoryId = succ.categories; 

Allerdings, wenn ich meinen zweiten API-Aufruf für den Kategorienamen mit der ID machen, ich Erhalte einen Fehler.

svampeApi.getCategoryData($scope.categoryId).then(function (succ) { 
    $scope.categories = succ; 
}, function(err) { 
    console.log('Error: ', err); 
}); 

Wie speichere ich die Kategorie-ID der einzelnen Posten im Rahmen, damit ich es in meinem zweiten api Anruf zugreifen kann? Die Kategorien umfassen den Namen der Kategorie, die ich über meiner Ansicht zugreifen möchten:

<p> 
    {{categories.name}} 
</p> 

Die Kategorie-Objekt ist leer:

Category Object [] 

Ich hoffe, dass Sie mir helfen können.

+0

Bitte klarstellen: Erhalten Sie den Kategorienamen vom Server oder ist er vom ersten Serveraufruf (einschließlich Kategorie-ID) in den JSON eingebettet? Ich sehe und REST/Ajax Anrufe nicht. HINWEIS: Ihre Serveraufrufe sind asynchron, so dass Sie nicht anrufen können, um den Kategorienamen vom Server abzurufen, bis der Aufruf des Kategorie-ID-Servers vollständig abgeschlossen ist. Dies bedeutet, dass Sie Ihre Versprechen ketten müssen. – MoMo

+0

Der erste Aufruf der 'svampeApi.getPostData ($ scope.id)' enthält die Kategorie ID, aber nicht den Namen. Deshalb versuche ich, die ID im zweiten Aufruf als 'svampeApi.getCategoryData ($ scope.categoryId)' zu übergeben. Das getCategoryData hat ein Feld namens name, das den Namen enthält. Ich möchte die ID aus dem ersten Anruf extrahieren, um sie im zweiten Anruf zu verwenden. Ich hoffe es macht Sinn. – krillebimbim

+0

Ist der zweite Aufruf zum Abrufen des Kategorienamens auf dem Server? Wenn es so ist, müssen Sie es innerhalb der 'succ' Funktion des ersten Anrufs nennen. Andernfalls wird es vorzeitig * vor dem ersten Aufruf aufgerufen, um die ID vom Server zu erhalten. Wenn der zweite Aufruf, um den Katzennamen zu erhalten, * nicht * ist und synchron ist, warum haben Sie also eine '.then()', die eine Anfrage für eine asynchrone Zusage enthält? – MoMo

Antwort

1

Bitte klären Sie: Erhalten Sie den Kategorienamen vom Server oder ist er vom ersten Server-Aufruf in den JSON eingebettet (einschließlich Kategorie-ID)? Ich sehe keine REST/Ajax-Anrufe. HINWEIS: Ihre Serveraufrufe sind asynchron, so dass Sie nicht anrufen können, um den Kategorienamen vom Server abzurufen, bis der Aufruf des Kategorie-ID-Servers vollständig abgeschlossen ist. Dies bedeutet, dass Sie Ihre Versprechen ketten müssen.

+1

Es funktioniert! Die ID wird mit der folgenden Syntax referenziert: $ scope.categoryId = succ.categories [0]; – krillebimbim

Verwandte Themen