2016-06-21 6 views
0

コード内のデータをアプリケーションに取り込もうとしていますが、ここには工場があります。

angular.module('starter.services', []) 

    .factory('Locations', function ($http, $q) { 
     // Might use a resource here that returns a JSON array 
      var url = "https://portal.mobilequbes.com/api/kiosks?callback=JSON_CALLBACK"; 
      var locations = function() { 
       $http.jsonp(url) 
        .then(function (result) { 
         return result.data; 
        }); 
      }; 

     return { 
      all: function() { 
       return locations; 
      }, 
      get: function (locId) { 
       for (i = 0; i < locations.length;i++){ 
        if (locations[i].friendlyName == parseInt(locId)) { 
         return locations[i]; 
        } 
       } 
      } 
     } 
    }); 

と私のコントローラ:それは読み込むとき

.controller('MapCtrl', function ($scope, $http, Locations) { 
    $scope.locations = Locations.all(); 
    $scope.createMarks = function() { 
     createList(Locations.all()); 
    } 
}) 

は、それだけでこのようになり、何もまたは2つのオブジェクトをロードします。

が、私はなぜ私がように見えることはできませんので、確認していません「」何か問題があると分かり、私はこれを死に読むように感じる。私はjsFiddleを使ってリターン関数をテストしました。それはうまく働いたので、イオン/コードバと何か関係があります。かなり確信しています。あなたの工場で

+0

'locations'関数は常にundefinedを返します。' return result.data; 'は' locations'コールバック関数ではなく '.then'コールバック関数を返します。 –

+0

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

+0

実際に申し訳ありませんが、私はすぐに完全な答えを書く時間がありません。この似たような質問への答えは正しい方向にあなたを指摘する必要があります:http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call-これは '$ http'が使うAPIなので、特に約束します。 –

答えて

1

ん、

angular.module('starter.services', []) 

.factory('Locations', function ($http, $q) { 
    // Might use a resource here that returns a JSON array 
     var url = "https://portal.mobilequbes.com/api/kiosks?callback=JSON_CALLBACK"; 
     var locations = []; //storing locations for future usage 

    return { 
     all: function() { 
      return $http.jsonp(url) 
       .then(function (result) { 
        locations = result.data; 
        return result.data; 
       }); 
     }, 
     get: function (locId) { 
      for (i = 0; i < locations.length;i++){ 
       if (locations[i].friendlyName == parseInt(locId)) { 
        return locations[i]; 
       } 
      } 
     } 
    } 
}); 

そして、あなたのコントローラでは、

.controller('MapCtrl', function ($scope, $http, Locations) { 
    Locations.all().then(function (locations) { 
     $scope.locations = locations; 
    }); 
    $scope.createMarks = function() { 
     createList(Locations.all()); 
    } 
}) 

今Locations.all()メソッドは、結果に解決されます約束を返します.dataがコントローラにあり、場所にアクセスできます。

以前は何も返されていないので、$ scope.locationsは未定義です。

+0

本当にうまくいった、ありがとう! – Peter

+0

Mohapatra私はこれがかなり遅いのを知っていますが、私がリストから抜け出そうとしているのであれば、機能を得るためにURLから抜け出しています。私は同じ方法論を使ってみましたが、何も返しません。 – Peter

+0

私は答えを編集しました。一見してください –

関連する問題