$ routeProvider - зависимости от контроллера инъекции в зависимости от URL-адреса
Рассмотрим код:
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?
Ответы
Ответ 1
Да! AngularJS может справиться с этим довольно легко thnx до свойства resolve
определения маршрута (подробнее здесь).
Итак, в основном вы могли бы написать что-то вроде:
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