У меня проблема, когда я действительно не могу опустить голову. Я использую базовый угловой http.get, который возвращает обещание:
getTask: function(id) {
var promise = $http.get('http://localhost:9000/get/tasks/'+id).success(function(data) {
return data;
});
return promise;
}
TasksService.getTask($stateParams.id).then(function(success){
$scope.task = success.data;
});
У задачи есть подсказки, которые я хочу получить, но она как-то всегда возвращает неопределенные. если я например делаю:
TasksService.getTask($stateParams.id).then(function(success){
$scope.task = success.data;
console.log($scope.task.deadline);
});
он не определен. Вы знаете, как я могу получить доступ к свойствам и как поделиться им с остальной частью моего контроллера?
Ах, спутанность .success
против .then
ударяет снова. Эта тонкая (и, на мой взгляд, совершенно ненужная) разница в том, что Угловое введение порождает множество проблем.
Проблема здесь в том, что .success
возвращает первоначальное обещание и в этом отношении игнорирует возвращаемые вами data
. Другими словами, он "отходит" и позволяет реализовать обработчик, который не влияет на остальную цепочку.
Чтобы исправить, используйте .then
:
return $http.get(url).then(function(response) {
return response.data;
});
Приложение:
Чтобы лучше понять, .success
концептуально ведет себя следующим образом:
promise.success = function(fn) {
promise.then(function(response) {
fn(response.data, response.status, response.headers, config);
});
// the original promise is returned, not the .then promise
return promise;
}
Исправьте это, выполнив следующее: $scope.task.task[0].deadline
Я бы посоветовал вам проверять переменные с помощью метода Object.keys следующим образом:
var obj = {};
obj['key_1'] = 1;
obj['key_2'] = 2;
alert(Object.keys(obj));
Этот метод расскажет вам многое о свойствах переменных и поддерживаемых методах.
$scope.task.task[0].deadline
и, действительно, с помощью Object.keys($scope.task)
и дальнейшей проверки, и он наконец смог найти решение гораздо быстрее.
getTask