如何注入常用方法?

时间:2013-09-11 16:25:53

标签: angularjs angularjs-scope

在我的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显然是一个问题。但我认为工厂是正确的方法。

我做错了什么,以及这种代码管理的最佳做法是什么?

1 个答案:

答案 0 :(得分:1)

我认为你只能向工厂注入实例。您可以使用$ rootScope

app.factory('commonFactory', function ($rootScope) {