2016-01-06 3 views
0

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

Моя фабрика выглядит следующим образом:

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 имеет смысл! –

ответ

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. – Alnitak

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 
    }); 
}); 
Смежные вопросы