2012-10-23 2 views
11

에 따라 주입 컨트롤러 종속 코드 고려해

var app = angular.module("app", [], function($routeProvider) { 
    $routeProvider 
    .when("/page1", { controller: "MyController" }) 
    .when("/page2", { controller: "MyController" }) 
    .when("/page3", { controller: "MyController" }); 
}); 

app.factory("StrategyOne", function() {...}); 
app.factory("StrategyTwo", function() {...}); 
app.factory("StrategyThree", function() {...}); 

app.controller("MyController", function(Strategy, $scope) {...}); 

이 URL에 따라, 나는 MyController를 구성 할 때, 주입 할 StrategyOne, 또는 StrategyTwo, 또는 StrategyThree 중 하나를합니다. 아이디어를 설명하는 의사 코드 :

var app = angular.module("app", [], function($routeProvider) { 
    $routeProvider 
    .when("/page1", { controller: "MyController", Strategy: "StrategyOne" }) 
    .when("/page2", { controller: "MyController", Strategy: "StrategyTwo" }) 
    .when("/page3", { controller: "MyController", Strategy: "StrategyThree" }); 
}); 

어떤 변화가 나는 AngularJS와 같은 것을 얻을 수 있습니까?

답변

25

예! AngularJS는 경로 정의의 resolve 속성 (자세한 내용은 here)으로 매우 쉽게 처리 할 수 ​​있습니다. 적절한 전략은 컨트롤러에 주입하도록

var app = angular.module("app", [], function($routeProvider) { 
    $routeProvider 
    .when("/page1", { controller: "MyController", resolve: {Strategy: "StrategyOne"}}) 
    .when("/page2", { controller: "MyController", resolve: {Strategy: "StrategyTwo"}}) 
    .when("/page3", { controller: "MyController", resolve: {Strategy: "StrategyThree"}}); 
}); 

:

그래서, 기본적으로는 같은 것을 쓸 수 있습니다! AngularJS DI 최고! resolve 주제를 다루는 아주 좋은 비디오 튜토리얼이 있습니다

, 당신은 흥미로운 찾을 수 있습니다 http://www.youtube.com/watch?v=P6KITGRQujQ&list=UUKW92i7iQFuNILqQOUOCrFw&index=4&feature=plcp

+1

OMG, 나는 그것이 가능해야합니다 봤는데,하지만 난 그게 _that_ 쉽게 예상되지 않았다. 감사! :-) – agibalov

+0

여전히 작동합니까? 나는 [여기] (https://groups.google.com/forum/#!msg/angular/QtO8QoxSjYw/SWxea0tOBGYJ)에 명시된 문제에 직면 해 있습니다. 내 공장은 한 번만 호출됩니다. 경로가 해결되어야 할 때가 아닙니다. – Lucas

+0

@ 루카스 이것은 아마도 공장이 싱글 톤이며 한번만 호출되기 때문일 것입니다! 무슨 일이 일어나는가 팩토리가 컨트롤러에 주입되어 (아무런 메소드도 호출되지 않음), 컨트롤러가 좋아하는 것을 콜렉터에 남겨 둡니다. 귀하의 컨트롤러'StrategyOne.getContent()' – WickyNilliams