2012-10-23 13 views
11

bağlı enjekte kontrolör bağımlılıkları kodu göz önünde bulundurun:

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'ye bağlı olarak, ben MyController oluştururken, enjekte edilecek StrategyOne veya StrategyTwo veya StrategyThree ya istiyorum.

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" }); 
}); 

Ben angularjs ile böyle bir şey elde edebilirsiniz herhangi bir değişiklik: Bir sözde kod fikir göstermek için?

cevap

25

Evet! AngularJS bu oldukça kolayca thnx'i bir rota tanımının resolve özelliğine taşıyabilir (daha fazla bilgi here). Doğru strateji Kumandanızda enjekte olması

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"}}); 
}); 

:

Yani temelde gibi bir şey yazabilirsiniz! En iyi AngularJS DI! resolve konularla uğraşan çok iyi bir video öğretici olduğunu

, bunu ilginç bulabilirsiniz: http://www.youtube.com/watch?v=P6KITGRQujQ&list=UUKW92i7iQFuNILqQOUOCrFw&index=4&feature=plcp

+1

OMG, bunun mümkün olduğuna emin oldum, ama _that_ kolay bekliyor edilmemiştir. Teşekkürler! :-) – agibalov

+0

Bu hala çalışıyor mu? [Burada] (https://groups.google.com/forum/#!msg/angular/QtO8QoxSjYw/SWxea0tOBGYJ) belirtilen bir sorunla karşılaşıyorum. Fabrikam yalnızca bir kez çağrıldıysa; ve her seferinde rota çözülmemelidir. – Lucas

+0

@Lucas Bu muhtemelen, fabrikaların bekar olması ve sadece bir kez çağrılmasıdır! Ne olur, fabrika kontrolörünüze enjekte edilir (buna hiçbir yöntem denir), kontrol cihazınızı sizin cihazınıza benzeyen herşeyi geri alır, örn. kontrol cihazınızda 'StrategyOne.getContent()' – WickyNilliams

İlgili konular