我的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/
您会注意到,在单击跨度之前,服务中的警报不会被调用,因为此时注射器会导致工厂的构建。