Динамическая страница в угловом маршруте

0

Я пытаюсь иметь динамическую маршрутизацию в Angular 1.3. Что-то похожее на то, что описано здесь и здесь. Примеры показывают примерно следующее:

$routeProvider.when('/:group/:pagename', {
    controller: 'RouteCtrl',
    templateUrl: 'uirouter.html'
})

а затем контроллер получит доступ к группе и pagename через $ routeParams. Это работает

Я пытаюсь сделать эту маршрутизацию немного более динамичной и динамически выбрать динамический шаблон и контроллер:

$routeProvider.when('/:group/:pagename', {
    controller: $routeParams.group + 'Ctrl',
    templateUrl: $routeParams.pagename + '.html'
})

Когда я устанавливаю точку останова, when вижу, что существует свойство $ get с функцией, которая имеет $ routeParams как один из параметров. Но я не могу понять, как получить его значения.

Проект находится на очень ранней стадии - я могу работать с ui-router или с ng-router, если у любой из них есть эта функция.

Теги:
angular-ui-router
angularjs-routing

2 ответа

2
Лучший ответ

Для динамической части templateUrl вы можете попробовать:

$routeProvider.when('/:group/:pagename', {
    controller: "SomeCtrl",
    templateUrl: function(params){return params.pagename + '.html';}
})

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

2

Вместо прямого значения вы можете объявить функцию, которая вернет строку templateUrl, то есть:

$routeProvider.when('/:group/:pagename', {
    controller: $routeParams.group + 'Ctrl',
    templateUrl: function (routeParams) {
        return routeParams.pagename + '.html';
    }
});

Я думаю, что то же самое можно сказать и о controller, но вы должны проверить его, поскольку я никогда не использовал его для контроллеров.

При этом, если у вас так много динамической логики в этом месте, возможно, вместо того, чтобы рассматривать это как разные контроллеры, вы можете инкапсулировать эти представления как разные директивы и ng-if определенная директива зависит от $routeParams которая будет установлена в одной упаковке контроллер?

  • 0
    TemplateUrl находится на (я смущен, что я пропустил это ... но как мне добраться до $routeParams в контроллере? Я попытался ввести, и это дало мне "неизвестного поставщика"

Ещё вопросы

Сообщество Overcoder
Наверх
Меню