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;
});

我想将我的代码重构为更简单的代码,而不是使用每种方法处理错误,我只使用一种通用方法并将其注入可能需要来自服务器的数据的每个控制器中。所以我试图创建一个这样的工厂:

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 回答