2013-08-29 1 views
1

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를 추가하여이 작업을 시도했지만 서비스가 모든 컨트롤러에서 사용되었는지 여부에 관계없이 호출되었습니다.

그것에 대한 아이디어가 있습니까? 서비스가 필요할 때만 지연되어로드 될 것이라고 생각했습니다.

그들이 종속성을 해결하기 위해 인젝터에 의해 주입 할 때 마크

+1

아니요, 지연되지 않습니다. 엄격하게 의존성 관리입니다. – Narretz

+0

도움을 많이 주셔서 감사합니다. – mooonli

답변

3

서비스 구축 또는 검색됩니다 접견. 그것에 대해 읽을 수 있습니다 here

또는 $ injector 서비스를 사용하여 필요에 따라 서비스를 가져올 수 있습니다. 인젝터 공장의 건설이 발생하면 그 이후

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

http://jsfiddle.net/NaYmd/

당신은, 당신은 범위를 클릭 할 때까지 서비스의 경고가 호출되지 않습니다 알 수 있습니다 예를 들면 다음과 같습니다.

관련 문제