Угловое объединение http получить запрос с этим

0

Я использую this вместо $scope для углового приложения, что приводит к трудностям, когда я пытаюсь получить доступ к результатам запроса get в моем контроллере.

Моя фабрика выглядит так:

app.factory('footballService', function($http) {
    return{
        getAllTeams : function() {
            return  $http({
                    url: 'url',
                    dataType: 'json'
            })
        }
    }
});

и мой контроллер выглядит так:

app.controller('footballController', function(footballService) {

    var footballController = this;

    footballService.getAllTeams().success(function(data){
        console.log(data); //this data is shown
        footballController.teams = data;
    });

    console.log(footballController.teams); //this is undefined
});

Проблема в том, что я хочу получить доступ к командам вне getAllTeams(). Может ли кто-нибудь объяснить, как я могу получить доступ к этой переменной? Я думал, установив var footballController = this; позволит мне получить доступ к этому во всем контроллере, но я должен неправильно понимать, как работает Angular.

Спасибо за любую помощь заранее.

  • 3
    потому что вы пытаетесь получить доступ к асинхронным данным, прежде чем они заполняются
  • 0
    @PankajParkar имеет смысл!
Теги:

2 ответа

1
Лучший ответ

getAllTeams() возвращает "обещание" - базовые данные недоступны до завершения асинхронного вызова.

Таким образом, вы можете только безопасно получить доступ к данным, которые в пределах .then обратного вызова (AFAIK .success осуждается), но она не должна быть такой же, обратный вызов, как тот, в котором вы назначили данные в текущей области:

var promise = footballService.getAllTeams().success(function(data){
    console.log(data); //this data is shown
    footballController.teams = data;
});

promise.then(function() {
    console.log(footballController.teams);
});
  • 0
    имеет смысл.
  • 0
    @PaulFitzgerald FWIW, я настоятельно рекомендую вам взглянуть на $resource - я радостно использовал $http везде примерно месяц, прежде чем обнаружил, что $resource может значительно упростить взаимодействие со службой RESTful.
0

Переместите консольный вызов в обратный вызов success.

app.controller('footballController', function(footballService) {

    var footballController = this;

    footballService.getAllTeams().success(function(data){
        console.log(data); //this data is shown
        footballController.teams = data;
        console.log(footballController.teams); //this is populated now
    });
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню