Angular настройка переменной как объекта через http

88
9

Я пытаюсь установить переменную как объект данных, возвращенный из http-запроса в angular, но переменная никогда не устанавливается даже в том случае, если она находится в $scope, если она не вложена в функцию успеха. Например, если я делаю это в контроллере:


    $scope.hello = [];
var getAppointmentsurl = './dbscripts/getAppointments.php';

$http({method: 'GET', url: getAppointmentsurl}).success(function(data) {

$scope.hello = data;
});

console.log($scope.hello);

}


Здравствуйте, пусто... поэтому я установил его в services.js следующим образом:


 this.getCalendarData=function(){
var hello = [];
var getAppointmentsurl = './dbscripts/getAppointments.php';

$http({method: 'GET', url: getAppointmentsurl}).success(function(data) {

hello = data;
});

return hello;

}


но по-прежнему приветствуется. Мне что-то не хватает?


изменить -
введите описание изображения здесь

спросил(а) 2021-01-25T19:17:12+03:00 4 месяца, 2 недели назад
1
Решение
76

 this.getCalendarData=function(){
var getAppointmentsurl = './dbscripts/getAppointments.php';

return $http({method: 'GET', url: getAppointmentsurl}).success(function(data) {

return data;
});

}

Это асинхронный вызов, который мы должны вернуть, например, выше.

ответил(а) 2021-01-25T19:17:12+03:00 4 месяца, 2 недели назад
45

По мере того как вы добавляете api-вызов как метод в службу, возврат данных из службы еще не будет разрешен, поэтому в контроллере возврат службы будет только обещанием


serviceName.getCalendarData().then(function(data){

//Success data
},function(){});


Код службы должен возвращаться, как приведенный ниже код, и здесь вы получите весь объект ответа,

return $http({method: 'GET', url:getAppointmentsurl});

Еще один способ получить данные, разрешенные с помощью прямого удаления других свойств, возвращается из службы, например,


return $http({method: 'GET', url:getAppointmentsurl}).success(function(data){

return data;
});

ответил(а) 2021-01-25T19:17:12+03:00 4 месяца, 2 недели назад
45

Чтобы уточнить правильный ответ Акаша, вот пример того, как он должен работать.


По вашему мнению, вы должны добавить логику, чтобы показывать данные только тогда, когда приветствует. т.е. ng-if="hello"


контроллер:


ServiceName.getCalendarData().then(function(response) {
$scope.hello = response;
});

службы:


this.getCalendarData = function() {
return $http.get('path/to/response/').success(function(data) {
return data;
});
}

ответил(а) 2021-01-25T19:17:12+03:00 4 месяца, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема