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 リクエストが有効なユーザー名値を返すことを確認しました。私はAngularにまったく慣れていないので、ここで何が間違っているのか誰かが指摘できれば本当に感謝しています。

4

1 に答える 1

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];
  });
}]);

{ users: [{ id: "34534534",name: "John" }] }これは、 API によって返されるものと同様の json 形式を想定しています。

これはその場で書いたものであり、試していないことに注意してください。しかし、それはうまくいくはずです。

警告: いくつかの間違いを修正するためにコードを編集しました。

于 2014-04-21T20:57:15.807 に答える