Romashishka
@Romashishka
Frontend developer

Как сделать оболочку над $routeProvider?

Есть стандартный код:
angular.module("main", ["ngRoute"])
        .config(RouterConfig);

    function RouterConfig($routeProvider){
        $routeProvider.when("/registration", {
            templateUrl: "/features/registration/view.html",
            controller: "RegistrationCtrl as reg"
        });
        //...
        $routeProvider.otherwise({redirectTo: '/registration'});
    }


Так как блоков $routeProvider.when() очень много, хочется сделать некий сервис, который будет сам генерить .config();
Пытаюсь сделать вот так:
function Router(){
        this.features = [
            "registration",
            "timeLeft"
        ];
        this.bindProvider = function($routeProvider){
            for(var feature in this.features) {
                $routeProvider.when("/" + feature, {
                    templateUrl: "/features/" + feature + "/view.html",
                    controller: feature + "Ctrl as " + feature
                });
            }
        }
    }


Проблема в том, что при попытке указать в .config() метод сервиса, сервис не найден.
\
angular.module("main", ["ngRoute"])
        .service("Router", Router)
        .config(Router.bindProvider); //Не видит сервис

Как сделать так, чтобы конфиг генерился автоматически?
  • Вопрос задан
  • 117 просмотров
Решения вопроса 1
YourDesire
@YourDesire
Я вообще по образованию бухгалтер...
Вообще, нельзя достучаться до $routeProvider вне config
Чисто теоретически, можно попробовать воспользоваться decorator.

Еще как вариант, сократить количество роутов примерно такими записями:

$routeProvider.when('/features/:feature*', {
  templateUrl: function(urlParam){
    return '/pages/' + urlParam.name + '.html';
  },
  controller: 'someController'
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы