Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

$routeProvider - injecting controller dependencies depending on URL

Consider the code:

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) {...});

Depending on URL, I want either StrategyOne, or StrategyTwo, or StrategyThree to be injected, when constructing MyController. A pseudo-code to illustrate the idea:

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

Any change I can achieve something like this with AngularJS?

like image 657
Andrey Agibalov Avatar asked Oct 23 '12 18:10

Andrey Agibalov


1 Answers

Yes! AngularJS can handle this pretty easily thnx to the resolve property of a route definition (more info here).

So, basically you could write something like:

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

to have the proper strategy injected into your controller! AngularJS DI at its best!

There is a very good video tutorial dealing with the resolve topics, you might find it interesting: http://www.youtube.com/watch?v=P6KITGRQujQ&list=UUKW92i7iQFuNILqQOUOCrFw&index=4&feature=plcp

like image 168
pkozlowski.opensource Avatar answered Oct 19 '22 21:10

pkozlowski.opensource