#angularjs
#angularjs
Вопрос:
Я работаю в проекте, который имеет интерфейс AngularJS и ASP.NET Серверная часть веб-API.
У меня есть служба, которая вызывает веб-API и возвращает кучу данных JSON. Я пытаюсь получить доступ к этим данным в своем контроллере, но получаю сообщение об ошибке, в котором говорится, что искомое свойство не определено! Свойство, которое мне нужно, — это RegisteredKeeperName .
$scope.getCrateDetails = function (result, isInsert) {
$scope.showCrateDetails = true;
getCrateDetails();
if (!$scope.premiumCrate.RegisteredKeeperName.toLowerCase().indexOf("Green Farm") > -1) {
$scope.calloutClass = 'callout-danger';
$scope.calloutMessage = 'We (Green Farm) cannot provide this service with the necessary documents.';
} else {
$scope.calloutMessage = 'All is good!';
}
};
Хотя, когда я распечатываю $scope
, я вижу, что свойство, которое мне нужно, заполнено правильной информацией!
{{premiumCrate.RegisteredKeeperName}}
Мой сервисный код выглядит так:
function getCrateDetails() {
// service call goes here.
stockData.GetCrateDetails($scope.premiumCrate.Id).then(
function (cData) {
$scope.premiumCrate = cData;
},
function () {
});
};
Комментарии:
1. у вас, должно быть, проблема с асинхронной синхронизацией с ajax. Пожалуйста, покажите ваш код, который загружается
RegisteredKeeperName
2. слишком много кода отсутствует, чтобы получить полную картину…
3. Добавлен код службы. Дайте мне знать, если вам потребуется какая-либо другая информация.
Ответ №1:
getCreateDetails
это асинхронный вызов (вы пытаетесь использовать данные до того, как они были возвращены и назначены), вы должны return
использовать этот вызов .then
и получить к нему доступ в контроллере, например:
function getCrateDetails() {
return stockData.GetCrateDetails($scope.premiumCrate.Id).then(function (cData) {
return cData.data;
}, function () {
});
};
И выполните вызов:
getCrateDetails().then(function(data) {
console.log(data); //hey data!
$scope.premiumCrate = data;
if (!$scope.premiumCrate.RegisteredKeeperName.toLowerCase().indexOf("Green Farm") > -1) {
$scope.calloutClass = 'callout-danger';
$scope.calloutMessage = 'We (Green Farm) cannot provide this service with the necessary documents.';
} else {
$scope.calloutMessage = 'All is good!';
}
});