2015-02-12 3 views
3

Я использую AngularJs, и мне нужно вернуть данные после соединения $ http.post. Это код:

app.controller('PrincipalController',['$http', '$scope', function($http,$scope){ 
    $scope.myData = 0; 
    $http.post("server/checklogin.php", 
    {id: "id",email: "email",password: "password"} 
) 
    .success(function(data){ 
    console.log($scope.myData) //0 
    $scope.myData = data; 
    console.log($scope.myData); // 1 
} 

OLD: Как передать данные в myData? - Спасибо за ваши ответы и извините, если я не объяснил хорошо.

Но теперь, в html, {{myData}} что я могу написать?

Я не знаю, если это основное, но я должен буду использовать «MyData» с «нг-если» ..

EDIT: Спасибо! Я думаю, что я решил! : D

+0

К сожалению я не могу понять этот вопрос, вы просто делаете «MyData = данные 'внутри функции «успех», в чем проблема? – Bolza

+0

Все, что вы хотите делать с данными, должно быть успешным. Вы не можете вытащить его из-за асинхронного характера. – paje007

+0

Единственный угловой способ сделать то, что вы хотите, то есть использовать асинхронно полученные данные синхронным образом, - это использовать службу $ resource, которая будет заполнять вашу переменную myData (если она находится в области $), когда данные возвращаются из сервер. $ http не предоставляет эту функцию сразу, и единственное место, где вы можете использовать возвращенные данные, находится в обратном вызове. –

ответ

2

вы должны сделать что-то вроде этого:

.success(function(data){ 
    $scope.myData = data; 
    //OR 
    myCallback(data); 
    console.log(data) //data = 1 (server works); 
} 

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

Я использовал $scope, потому что обычно вы можете использовать его через службу на контроллере, где доступен объем. В противном случае вы можете использовать функцию обратного вызова

7

Обычно в службе вы вернётесь обещание

myService.getCheckLogin = function { 
    return $http.post("server/checklogin.php", 
     {id: "id",email: "email",password: "password"} 
    ); 
} 

затем в контроллере

myService.getCheckLogin() 
.success(function(data){ 
    $scope.myData = data; 
} 
.error(function(err){ 
    console.log(err); 
}