2017-06-17 7 views
0

私はDashboardCtrlと呼ばれる親コントローラとアプリケーション、および複数の子コントローラ(DashboardBuyerCtrl、DashboardSellerCtrlを...)持ってAPIリクエスト1

私はの結果を共有できるようにしたいのですが異なるコントローラ間のHTTP要求。 現時点では、すべてのコントローラでHTTPリクエストを実行していますが、これは理想的なパフォーマンスではないと思います。 私はサービスを利用すべきであることを読んだが、私はここで立ち往生している。

誰でもお手伝いできますか?

おかげで、一般的には、良い練習あなたが整理し、アプリケーション間でコードを共有するのに役立ちますので、私はサービスが作成され、コントローラで再利用する方法を紹介する小さなアプリケーションを作成しましたされたサービスを使用して

答えて

1

:パフォーマンスについて

var app = angular.module('testApp', []); 
 

 
app.controller('ctrlA', function($scope, getIp) { 
 
    getIp().then(function(resp) { 
 
    $scope.data = resp.data.origin; 
 
    }); 
 
}); 
 

 
app.controller('ctrlB', function($scope, getIp) { 
 
    getIp().then(function(resp) { 
 
    $scope.data = resp.data.origin; 
 
    }); 
 
}); 
 

 
app.service('getIp', function($http) { 
 
    return function() { 
 
    return $http.get('https://httpbin.org/ip'); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="testApp"> 
 
    <div ng-controller="ctrlA"> 
 
    First controller 
 
    <p>IP: {{data}}</p> 
 
    </div> 
 
    <div ng-controller="ctrlB"> 
 
    Second controller 
 
    <p>IP: {{data}}</p> 
 
    </div> 
 
</div>

コンテンツが頻繁に更新されていない(またはアルで更新されていない場合、私はcachingオプションを使用してお勧めしたいですこのようにすると、将来の使用のために要求の応答が保存されます。

official documentationでサービスの詳細を読むことができます。

+0

非常に完全な答えをいただきありがとうございます。私はまだ質問があります。私の場合、ctrlBはctrlAの子であり、私のコンテンツはかなり定期的に更新されていますが、私はctrlBのコンテンツを使用しているときにctrlAのコンテンツと同じになることを知っています。私はまだサービスを2度呼びますか?あなたが提供した例では、あなたはipをフェッチしていないが、もっと動的なものがあるとしましょう(実際の日付を言いましょう)。両方のコントローラ間でコンテンツを「共有する」べきではありませんか? –

+0

親から子へデータを共有する必要がある場合は、適切なネスティングとパラメータの受け渡しができるので、[components](https://docs.angularjs.org/guide/component)を使用する必要があります。一方的な流れ(親から子供へ)は厳密に推奨されていますが、双方向の流れのためにはまだサービスを使うべきです。また、すべてのサービスはシングルトンです。つまり、その中に変数を設定するとそのまま維持され、他のソースから変更または取得できます(現在の日付の場合)。あなたに他の質問があれば教えてください! –

+0

すぐに答えてくれてありがとう。私はコンポーネントを掘り起こすだろう。 –

関連する問題