0

私の 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 は明らかに問題です。しかし、私は工場が正しい道だと思いました。

この種のコード管理のベストプラクティスは何ですか?

4

1 に答える 1

1

インスタンスをファクトリにのみ注入できると思います。$rootScope を使用できます

app.factory('commonFactory', function ($rootScope) {
于 2013-09-11T16:47:42.180 に答える