1

私は工場/サービスを使用して重複したコーディングを排除すると教えられました。ここでうまく動作するコードの一部です。Angularjsでajax呼び出しにファクトリ/サービスを使用するのはなぜですか?

app.controller('ServicesCtrl',['$scope','DataFactory',function($scope,$http,DataFactory){ 

    DataFactory.GetData('services1.json') 
     .then(function(response){ 
     $scope.returnedData = response.data; 
    }) 
     .catch(function(response){ 
     console.log('Error in process',response.status,response.data); 
    }); 
    }]); 

app.controller('ContactCtrl',['$scope','DataFactory', function($scope,DataFactory){ 

    DataFactory.GetData('location.json') 
     .then(function(response){ 
     $scope.returnedData = response.data; 
    }) 
     .catch(function(response){ 
     console.log('Error in process',response.status,response.data); 
    }); 
    }]); 

app.factory('DataFactory',['$http',function($http){ 

    var factory = {}; 

    factory.GetData = function(path) { 
    return $http.get(path); 

    } 
    return factory; 
}]); 

私の質問は、なぜ私たちは、コントローラ内部の約束で作業しなければならないとき、このようなAjaxの呼び出しを行うために、サービス/ファクトリを使用1.ですか?つまり、私は同じことをしなければならない。そして、両方のコントローラの呼び出しをここでキャッチする。その効率はどこですか?これを行うための良い方法はありますか?または私はこれを間違っているのですか?工場内のこれらの約束事に取り組み、response.dataを別のコントローラに返すことは可能ですか?

+1

ことは可能キャッシュはサービスで約束です:

は、ドキュメントを参照してください。それ以外の場合、JavaScriptはシングルスレッドです。関数はただちに利用可能なデータを返すことができるか、*未決*の約束を返します。これは、将来解決されるか、拒否されます。 – georgeawg

答えて

2

こちらの物は、コードの再利用性です。ユーザーの入札を返すサービス

angular.module('test') 
    .service('testService', function ($http) { 

    this.getBidsUser = function ($username) { 
     var endpoint = "bids/users/"+$username; 

     return $http({ 
     method: 'get', 
     url: endpoint 
     }); 
    }; 

} 

というサービスがあるとします。さまざまなビューで同じ情報を使用することができます。したがって、同じコードを再度書き直す必要がないように、サービスを使用することをお勧めします。

メンテナンス性のために同じサービスにすべて同じエンドポイント関連サービスを追加したい場合があります。

サービスパターンを使用しない場合、サービスのエンドポイントを変更する必要があります。

約束のコールバックを約束します。これらの約束をサービス内で処理すると、発信者のタイムラインを維持することは容易ではありません。

+0

@Raviマークが合格した場合はそれが役に立ちます:) –

0

こんにちは、我々は、実装の詳細にについては

を非表示にする

  • 、コードを再利用する可能性を持っている
  • 、アプリケーションはより多くのモジュラーにするために、工場やサービス

    • を使用たとえば、http呼び出しを行うサービスは、コールタイプによって無意識に必要なオブジェクトを返す高レベルの "サービス"とみなされ、高水準で再利用可能です。

      サービスでは、呼び出しパラメータをカスタマイズできます。呼び出しパラメータによっては、呼び出し側のコントローラによってそのパラメータの一部が指定されないことがあります。あるいは、いくつかの前処理や後処理を行うこともできますし、キャッシングなどを行うこともできます。ポータブルなので、必要なときにいつでも呼び出すことができます。あなたの最後の質問

      については

      は工場の中にあるものの約束に取り組み、 異なるコントローラにresponse.dataを返すようにすることが可能ですか?

      おそらく可能ですが、応答のタイミングと関係があるため、実装するのが複雑かもしれません。代わりに、あなたはすでにあなたが探していることを行うことができるngResourceモジュールの$ resourceサービスをお勧めします。

      AngularJs Tutorial on $resource

      Angularjs Programming guide on $resource

  • 関連する問題