0

今日、私のstackoverflow検索機能が壊れていると思います。これを尋ねたのは私だけではないはずです。私は本当にこれを理解するためにいくつかの助けを借りることができたので、私はそうではないことを願っています. データソース間の切り替えが大きな部分を占めますが、「抽象化する最善の方法」も論理的な次の質問です。

とにかく、私は3ダースのウィジェットのようなものを持っています. 各ウィジェットには、3 つのデータ ソース (API フル、API ショート、json ファイル) のいずれかがあります。インターネットから入ってきたばかりのユーザー、営業が提供する一時的なログインを持つユーザー、および独自の API キーでログインしたユーザーがいます。

  1. ログインなし = ダミーデータ/json
  2. temp login = 要約されたエンドポイントからのデータ
  3. API キー = 完全なデータ セット エンドポイント

これを論理的に説明すると、ユーザー アクセス用の $scope.access と、ユーザーがクリックしたウィジェット用の $scope.widget があります。古い関数の習慣に頼ると、これら 2 つをケース ブレークで使用して、適切なエンドポイントの値を返すことができるようです。しかし、次のように $http 呼び出しを機能させる変数を取得できないようです。

$http.get($scope.call).success(function(data) {
    $scope.group = data;
});

したがって、私の質問は次のようになります。

変数を使用して $http を再利用する最善の方法 (または私ができる方法) は何ですか?

このロジックをどのように抽象化し、コントローラーからこれを取得する必要がありますか (またはする必要がありますか?)

本当に優れているのは、おそらく次のように、コントローラーで呼び出すことができるものです。

var X = getEndpoint($scope.access, $scope.widget);
var Y = getEndpoint($scope.access, $scope.widget);
var Z = getEndpoint($scope.access, $scope.widget);

残りはフードの下に隠されています。これに取り組む方法についてのアイデアはありますか?

よろしくお願いします。

4

2 に答える 2

0

ApiMock は AngularJS 用の最小 (1.68kb gzip 圧縮) ライブラリで、API 呼び出しを静的 JSON ファイルにルーティングすることで RESTful API をモックできます。

https://github.com/seriema/angular-apimock

于 2016-12-07T15:40:12.353 に答える
0

@runTarm が彼/彼女のコメントで述べたように、API 呼び出しのロジックを別のサービス内にラップできます。はい、インターセプターを使用して http 呼び出しを制御できます。

多くのオプションの 1 つは、各ユーザー タイプの API エンドポイントをどこかに (角度定数などで) 保存し、サービス内でユーザーのアクセス権レベルに一致するエンドポイントを使用することです。すべてのコントローラー/ウィジェットは、エンドポイントを決定するロジックを保持する同じサービスを使用できます。

ここでは単純化していることはわかっていますが、アクセス レベルに基づいて http 経由でデータを取得するサービスを考えてみましょう。

app.factory('MyService', function($http, API){
  return {
      get: function(accessLevel) {
        var endPoint = (_.findWhere(API, { access: accessLevel })).endPoint;
        return $http.get(endPoint);
      }
   }
});

これにより、特定のアクセス レベルによって決定されるエンドポイントからデータが取得されます。ここで API は定数です:

app.constant('API', [{ 
    access: 1, 
    endPoint: 'http://jsonplaceholder.typicode.com/posts'
  },{ 
    access: 2, 
    endPoint: 'http://jsonplaceholder.typicode.com/comments'
}]);

次に、たとえば次のように使用して、コントローラーでサービスを使用します

MyService.get($scope.accessLevel).then(function(data){
  $scope.response = data;
});

あなたがアイデアを得たことを願っています。シンプルなプランカーはこちらhttp://plnkr.co/edit/GLmVmh

于 2014-08-10T21:17:14.963 に答える