AngularjS服务/工厂在启动时加载,但未使用



我的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,无论该服务是否在任何控制器中使用,它都会被调用。

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

问候Marc

当注入器注入服务时,它们会被构造或检索,以确保依赖关系得到解决。你可以在这里阅读

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

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

http://jsfiddle.net/NaYmd/

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

最新更新