2014-04-21 6 views
1

Я работал над созданием службы для возврата имени пользователя.service not возвращающее значение

var username, $promise; 

angular.module('TestApp').factory('UserService', function($http) { 
$promise= $http.get('/api/getuser') 
.success(function(data) { 
    username = data; 
}); 

$promise.then(function() { 
return username; 
}); 
}); 

Но инъекционный эту услугу в контроллере вернется в неопределенном значении

angular.module('TestApp') 
.controller('UserLoginController', function($scope, UserService){ 
console.log("Username is: "+ UserService); 
}); 

Я подтвердил, что HTTP GET запрос возвращает действительное значение имени пользователя. Я совершенно новичок в угловатости и был бы очень признателен, если бы кто-нибудь мог указать, что я делаю неправильно здесь.

+0

Корень проблемы заключается в том, что ваша фабричная функция UserService ничего не возвращает; и поэтому я подозреваю, что фабрика UserService в контроллере не будет определена. Но у меня нет времени, чтобы попытаться переписать код. – JeffryHouser

+0

@JeffryHouser: Хорошо. Спасибо, что заколол. Я действительно сомневаюсь, как я ввожу его в контроллер. – pbd

+2

Я предлагаю вам пройти учебник по phonecat на угловом веб-сайте, прежде чем задавать какой-либо вопрос. Очевидно, вы не получили основы angularjs.If ваша фабрика не возвращает ничего, что это не фабрика. – mpm

ответ

1

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

app.factory('UserService', [ '$http', function($http){ 

    var userService = {}; 

    userService.getUser = function(){ 
    return $http.get('/api/getuser').then(function(res){ 
     return res.data; 
    },function(error){ 
     console.log(error); 
     return []; 
    }); 
    } 

    return userService; 
}]); 

затем вызвать его в контроллере:

app.controller('MyController', ['$scope', 'UserService', function($scope,UserService){ 

    $scope.user = {}; 
    UserService.getUser().then(function(data){ 
    $scope.user = data.users[0]; 
    }); 
}]); 

Это предполагает формат JSON, похожий на { users: [{ id: "34534534",name: "John" }] } возвращенных ваш API.

Обратите внимание, что я написал это на лету и не пробовал. Это должно сработать.

Предупреждение: Я только что редактировал свой код, чтобы исправить некоторые ошибки.

+1

Спасибо! Попробуем. Кроме того, я знаю его плохой код, но спагетти ?? – pbd

+0

+1; Я перешел к ответу что-то вроде этого, но отказался из-за других ограничений времени. – JeffryHouser

Смежные вопросы