私の angularjs コントローラーには、これに非常によく似たコードがたくさんあります。
homeFactory.getApplicationData().then(function (response) {
$scope.applicationdata = response.data;
}, function (error) {
$scope.alerts.push({ type: 'error', msg: error.data.ExceptionMessage });
});
Web.API サービスを呼び出してエラーを処理する場所。注入されたファクトリhomeFactory
は次のようになります。
app.factory('homeFactory', function ($http) {
var factory = {};
// Application Data
factory.getApplicationData = function () {
var url = "/tracker/api/applicationdata";
return $http.get(url);
};
return factory;
});
コードをより単純なものにリファクタリングしたいと思います。エラーを処理するすべてのメソッドの代わりに、1 つの一般的なメソッドを使用し、サーバーからのデータを必要とする可能性があるすべてのコントローラーにそれを挿入します。だから私はこのような工場を作成しようとしていました:
app.factory('commonFactory', function ($scope) {
var factory = {};
factory.getData = function (method) {
method.then(function (response) {
return response.data;
}, function (error) {
$scope.alerts.push({ type: 'error', msg: error.data.ExceptionMessage });
});
};
return factory;
});
そして、これをコントローラーに挿入して、次のようなことができるようにします。
$scope.applicationdata = commonFactory.getData(homeFactory.getApplicationData());
しかし、これは機能しません。この場合、 $scope は注入されることに満足していないようです:
エラー: [$injector:unpr] 不明なプロバイダー: $scopeProvider <- $scope <- commonFactory
最初に、サービスがシングルトンであることを知っているため、ファクトリを使用していたため、 $scope は明らかに問題です。しかし、私は工場が正しい道だと思いました。
この種のコード管理のベストプラクティスは何ですか?