Как мне получить доступ к данным вложенных категорий и ссылаться на них в моем контроллере?

Я создаю приложение Ionic с API WP Rest. Я вернул данные сообщения, но, кроме того, я хочу получить название категории. Данные JSON для сообщений содержат только идентификатор категории. Я пытаюсь получить доступ к идентификатору категории и сослаться на него в своем контроллере, чтобы получить данные категорий, чтобы получить имя категории через идентификатор.

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);
});

});

С помощью этой строки я должен получить идентификатор категории, поскольку он хранится в объекте Post:

$scope.categoryId = succ.categories;

Однако, когда я делаю второй вызов API для имени категории, используя идентификатор, я получаю сообщение об ошибке.

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

Как сохранить идентификатор категории отдельного сообщения в области действия, чтобы я мог получить к нему доступ во втором вызове API? Категории включают название категории, к которой я хочу получить доступ, на мой взгляд, через:

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

Объект категории пуст:

Category Object []

Я надеюсь, что вы можете мне помочь.


person krillebimbim    schedule 06.11.2016    source источник
comment
Уточните, пожалуйста: вы получаете название категории с сервера или оно встроено в JSON при первом вызове сервера (включая идентификатор категории)? Я не вижу и вызывает REST/Ajax. ПРИМЕЧАНИЕ. Вызовы вашего сервера являются асинхронными, поэтому вы не можете позвонить, чтобы получить имя категории с сервера, пока вызов сервера с идентификатором категории не будет гарантированно завершен. Это означает, что вам нужно связать свои обещания.   -  person MoMo    schedule 07.11.2016
comment
Первый вызов 'svampeApi.getPostData($scope.id)' содержит идентификатор категории, но не имя. Вот почему я пытаюсь передать идентификатор во втором вызове как «svampeApi.getCategoryData($scope.categoryId)». В getCategoryData есть поле с именем name, которое содержит имя. Я хочу извлечь идентификатор из первого вызова для использования во втором вызове. Я надеюсь, что это имеет смысл.   -  person krillebimbim    schedule 07.11.2016
comment
Является ли второй вызов для получения названия категории на сервере? Опять же, если это так, вы должны вызвать его внутри функции 'succ' первого вызова. В противном случае он вызывается преждевременно до первого вызова для получения идентификатора, возвращаемого с сервера. Если второй вызов для получения имени кошки не направлен на сервер и является синхронным, почему у вас есть '.then()', который подразумевает запрос на возврат асинхронного обещания?   -  person MoMo    schedule 07.11.2016
comment
Данные категорий как таковые вложены в данные JSON: Categories: [ 3 ],   -  person krillebimbim    schedule 07.11.2016
comment
Тогда почему вы используете «.then(...)»? Является ли реализация функции обещанием?   -  person MoMo    schedule 07.11.2016
comment
Спасибо за разъяснения. Второй вызов также на сервер. Я попытаюсь переместить его внутрь функции 'succ'.   -  person krillebimbim    schedule 07.11.2016
comment
Если это сработает, пожалуйста, «примите» мой ответ. Большое спасибо.   -  person MoMo    schedule 07.11.2016


Ответы (1)


Уточните, пожалуйста: вы получаете название категории с сервера или оно встроено в JSON при первом вызове сервера (включая идентификатор категории)? Я не вижу вызовов REST/Ajax. ПРИМЕЧАНИЕ. Вызовы вашего сервера являются асинхронными, поэтому вы не можете позвонить, чтобы получить имя категории с сервера, пока вызов сервера с идентификатором категории не будет гарантированно завершен. Это означает, что вам нужно связать свои обещания.

person MoMo    schedule 06.11.2016
comment
Оно работает! Для ссылки на идентификатор используется следующий синтаксис: $scope.categoryId = succ.categories[0]; - person krillebimbim; 07.11.2016