2012-10-23 15 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) {...}); 

यूआरएल के आधार पर, मैं या तो StrategyOne, या StrategyTwo, या StrategyThree चाहते हैं, इंजेक्ट किया जा करने के लिए जब MyController निर्माण। विचार को चित्रित करने के लिए एक छद्म कोड:

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) पर इस सुंदर आसानी से thnx को संभाल सकता है। अपने नियंत्रक में इंजेक्शन उचित रणनीति के लिए

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