2016-04-30 4 views
2

У меня есть маршрут, установленный в AngularJS с переменным параметром.AngularJS - Использование параметров NgRoute в имени контроллера

Это расширение от this question; Я могу использовать params в переменной templateUrl так:

.when('/course/:lesson', { 
    templateUrl: function(params){ 
     return '/partials/course/' + params.lesson; 
    } 
    //... 
}) 

Однако, если я пытаюсь сделать что-то для имени переменной контроллера я получаю unknown provider ошибку

.when('/course/:lesson', { 
    templateUrl: function(params){ 
     return '/partials/course/' + params.lesson; 
    }, 
    controller: function(params){ 
     return params.lesson + 'Ctrl'; 
    } 
}) 

В принципе, вместо того, чтобы писать 100 различных маршруты, которые все следуют той же структуре, я хочу взять переменную lesson и сопоставить ее с маршрутом /partials/course/{{lesson}}, а также с контроллером {{lesson}}Ctrl.

Возможно ли это?

ответ

3

Вы можете сделать что-то вроде ниже, а не чище. Но он будет работать

controller: function($scope, $controller, $routeParams){ 
    $controller($routeParams.lesson + 'Ctrl', {$scope: $scope}); 
} 

Обработка такой ситуации будет легче, если вы будете смотреть на ui.router, который имеет controllerProvider, который будет работать, как вы пытаетесь.

+0

Это здорово, я не знал, что вы можете пройти в '$ controller' вот так! – Jascination

0

Нет - имя контроллеров статично - это функции, которые скомпилированы до того, как мы запустим наше приложение. Больше информации here.

Однако можно динамически добавлять контроллер для просмотра на основе ngController. Больше информации here

+1

Имя контроллера статично, однако вы можете создать экземпляр контроллера вручную. Проверьте ответ Panraj. – dfsq

Смежные вопросы