2016-08-21 5 views
0

私はAngularJS 1.5ディレクティブている:私は、検索を呼び出した後、私のコントローラでassetSearchService.assetsを使用しようとすると、データがassetService.assetsAngularJSコールバックで変数を設定する方法は?

var assetSearchService = function(proService) { 
    var assets = []; 

    var searchAssets = function(searchTerm){ 
     proService.searchAssets(searchTerm).then(function(data){ 
      assets = data.data; 
     }); 
    }; 

    return { 
     searchAssets, searchAssets, 
     assets: assets 
    }; 
}; 

設定されていません。

私がsearchAssets約束を返した後にデータを記録すると、私はデータを取得しています。

this.assetsコールバックから変数を取得するにはどうすればよいですか?

+1

の代わりに、*より複雑なソリューションを実現することができ、データを既存の配列にプッシュする必要があります。 'assets = assets.concat(data.data);' – Claies

+0

いいえ、アセットは最初に宣言された 'var assets'を参照しません。 – mikeb

+1

ですが、コールバック内で別の配列を置き換えて角括弧を壊しています – Claies

答えて

1

回答が見つかりました。 assets = newArrayconactも現在の配列を変更するのではなく、新しい配列を返して参照を破棄するため、どちらも機能しません。

これは動作します:

Array.prototype.push.apply(assets, data.data);

をここで作業例です:https://jsfiddle.net/mbaranski/5k4bqo0z/

0

あなたは、コールバックの内側* `assets`を交換

var assetSearchService = function(proService) { 
    service = this; 
    service.assets = []; 

    service.searchAssets = function(searchTerm){ 
    proService.searchAssets(searchTerm).then(function(data){ 
     assets.push(data.data); 
    }); 
    }; 

    return service; 
}; 
+0

この問題は、全体の問題が' assets'配列を空にして、 'data.data'の各項目を新しい配列に追加しているので、答えません。 – mikeb

関連する問題