2017-03-02 8 views
2

最近Ionicで開始しましたが、AngularJSについてよく理解していなければなりません。angularjsで約束した後にデータを返す方法

基本的に私は検索フィールドを持っています。ここで私はプロパティformdata.searchTextをバインドし、値が変更されるたびに検索機能を起動します。コールバックは、私のリストを埋めるアーティストのコレクションです。

<input type="search" ng-model="formdata.searchText" placeholder="Search" 
ng-change="search()"> 

私のコントローラでは、このプロパティが定義されていて、メソッドの検索が呼び出されます。検索はAPI呼び出しのために工場に届きます。

.controller('SearchController', function($scope, SpotifyFactory) { 

$scope.formdata = [{ 
    searchText: "" 
    }]; 

$scope.search = function(){ 
    $scope.searchResults = SpotifyFactory.searchArtist($scope.formdata.searchText); 
    }; 
}) 

これは今のところうまく動作します。この呼び出しはSpotify APIに対して行われ、検索エンジンに基づいて見つかったアーティストの結果が返されます。

マイデータ:私は私のコントローラで$ scope.searchResultsをCONSOLE.LOG

1

、それは私の希望値が含まれています。しかし、私はそれが約束が行われた後にconsole.logが実行されているために起こると信じています。これにより、データを表示することができます。私は私のコントローラでオブジェクトをCONSOLE.LOG、および例

console.log($scope.searchResults.artists); 

のために言うなら他のプロパティにアクセスするImがまだできている間は、未定義を返します。

以下は、私が工場でAPI呼び出しを行う方法です。

私の質問は、APIの呼び出しが完了した後、データが返されるようにする方法です。

答えて

1

は、その後、あなたが

SpotifyFactory.searchArtist('madonna').then((data) { 

$log.info('Data retrieved!', data); 
// do things you want to do after results are found 
}).catch(... error function); 
+0

を配置したい場所からそれを呼び出す約束

.factory('SpotifyFactory', function($http){ var foundArtists = function ($searchTerm) { return new Promise(function(resolve, reject) { var baseUrl = "https://api.spotify.com/v1/search?query=" + $searchTerm + "&type=artist&offset=0&limit=20"; var searchResults = []; searchResults.$promise = $http.get(baseUrl).then(function(response){ angular.copy(response.data, searchResults); resolve(searchResults); }); }}); return { searchArtist : foundArtists } } 

を使用してあなたの先生ありがとう!それはまさに私が探していたものでした!私はまだそれをアップウォークする特権を持っていないが、一度十分なポイントがあれば、私はそうするだろう! – user3672317

+0

@ user3672317あなたは大歓迎です、これは角度のある工場の一般的な使用法であり、今日はどこにでも約束があります;) – sbaaaang

関連する問題