2014-04-21 77 views
1

我一直在努力編寫一個服務來返回用戶名。服務不返回值

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的基礎知識。如果你的工廠不返回任何東西,它不是工廠。 – 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]; 
    }); 
}]); 

這是假設類似於你的API返回{ users: [{ id: "34534534",name: "John" }] }一個JSON格式。

請注意,我是這樣寫的,並沒有試用它。它應該工作。

警告:我只是編輯我的代碼來修復一些錯誤。

+1

謝謝!將嘗試一下。另外,我知道它的錯誤代碼,但意大利麪? – pbd

+0

+1;我正在轉向這樣的答案,但由於其他時間限制而放棄。 – JeffryHouser