1

我的 AngularJS 应用程序有问题。我定义了一些工厂,它们被注入到一些控制器中(在需要的地方)。我的问题是这些工厂在我第一次启动应用程序时被初始化。

导致问题的服务之一:

PlanningPoker.factory('PokerTable', function ($http) {
var baseURL = "/api/pokertable/";

return {
    list: function list(playerId) {
        return $http.get(baseURL, {params: {playerid : playerId}});
    },
    save: function save(pokertable) {
        return $http.post(baseURL, pokertable, {});
    }
};

});

该服务在控制器中的使用方式如下:

PlanningPoker.controller('PokerTableListController', function ($rootScope, $scope, $route, PokerTable, SocketEvent) {
PokerTable.list($rootScope.playerId).
    success(function (data, status, headers, config) {
        $scope.pokertables = data;
    });

});

此外,当我从控制器回调中删除 PokerTable 服务时,该服务会被调用。我通过在服务中添加一个 console.log 来尝试这个,无论该服务是否在任何控制器中使用,它都会被调用。

有什么想法吗?我认为只有在需要服务时才会延迟加载服务?

问候马克

4

1 回答 1

3

服务在被注入器注入时被构造或检索,以确保依赖关系正常工作。你可以在这里阅读

或者,您可以根据需要使用 $injector 服务来获取服务。这是一个例子:

    .controller('test', function($scope, $injector) {
      $scope.func = function() {
        var factory = $injector.get('factory');
      };
    });

http://jsfiddle.net/NaYmd/

您会注意到在单击跨度之前不会调用服务中的警报,因为那是注入器导致工厂构建的时候。

于 2013-08-29T08:06:19.277 回答