2016-12-26 13 views
0

を返すこれが私のサービスです。もう一つの非同期サービスは未定義

(function() { 
    'use strict'; 

    angular 
     .module('app') 
     .service('ClientsService', Service); 

    function Service($http) { 

     function getClients() { 
      $http.get('app/client/clients.json') 
       .then(function(res){ 
        return res.data; 
       }); 
     } 

     return { 
      getClients: getClients, 
     }; 
    } 
})(); 

私はJSONファイルからクライアントを入手することができますI then内部のコンソールログ場合。 は、その後、私は私のコンポーネントでサービスを利用したい:

(function() { 
    'use strict'; 

    var module = angular.module('app'); 

    module.component("client", { 
     templateUrl: "app/client/client.html", 
     controllerAs: "model", 
     controller: function (ClientsService) { 
      var model = this; 
      model.clients = ClientsService.getClients(); 
      console.log(model.clients) 
     } 
    }); 
})(); 

しかし、ログには、私を言う:undefined

どうすれば修正できますか?

+0

'getClients()'も、他と何も – charlietfl

+0

を返しません。すでにあなたがリターン 'リターン$ http.get( 'アプリ/クライアント/クライアントを忘れてしまった、と言います。 json ').... ' – AlainIb

+0

事はデータと約束を返すのですが、回答を読むことは他の選択肢がないと思います – FacundoGFlores

答えて

1

これが機能するには、わずかなリファクタリングが必要です。

(function() { 
    'use strict'; 

    angular 
     .module('app') 
     .service('ClientsService', Service); 

    function Service($http) { 

     function getClients() { 
      //Notice the return here? we're returning a promise. 
      return $http.get('app/client/clients.json') 
       .then(function(res){ 
        return res.data; 
       }); 
     } 

     return { 
      getClients: getClients, 
     }; 
    } 
})(); 
(function() { 
    'use strict'; 

    var module = angular.module('app'); 

    module.component("client", { 
     templateUrl: "app/client/client.html", 
     controllerAs: "model", 
     controller: function (ClientsService) { 
      var model = this; 
      //getClients() now returns a promise that is resolved 
      //when the client list is loaded 
      ClientsService.getClients().then(function(clients){ 
       model.clients = clients; 
       console.log(model.clients); 
      }); 
     } 
    }); 
})(); 
1

これは、http要求が完了していないためです。 httpリクエストが完了した後にのみデータを取得します。次のコードを試してみてください。また、http promiseをサービスから返します。

module.component("client", { 
    templateUrl: "app/client/client.html", 
    controllerAs: "model", 
    controller: function (ClientsService) { 
     var model = this; 
     ClientsService.getClients().then(function(clients){ 
      model.clients = clients; 
      console.log(model.clients) 
     }) 
    } 
}); 

このような変更サービス:

(function() { 
'use strict'; 

angular 
    .module('app') 
    .service('ClientsService', Service); 

function Service($http) { 

    function getClients() { 
     return $http.get('app/client/clients.json') 
      .then(function(res){ 
       return res.data; 
      }); 
    } 

    return { 
     getClients: getClients, 
    }; 
} 

})();

関連する問題