2014-11-04 5 views
2

Я пытаюсь определить общий маршрут, который будет обрабатывать большую часть запроса. Добавление маршрута для каждого добавления функции - это то, что я чувствую себя нехорошим и не поддерживаемым.Как построить имя контроллера из маршрута в angularjs

Итак, моя цель - написать общий маршрут и динамически разрешать решения, включая разрешение всех зависимых управляющих файлов &, разрешение шаблонаUrl и разрешение имени контроллера. Я могу разрешить/построить все, кроме имени контроллера. Пожалуйста, помогите мне путь вокруг

Мой маршрут с пользовательским распознаватель:

$routeProvider 
.when('/:module/:controller/:action?', routeResolver.resolve()) 

Внутри моего пользовательского распознавателя:

function routeResolverProvider(){ 

this.$get= function(){ 
    return this; 
} 

this.resolve = function (options) { 
var route = {}; 

route.templateUrl = function (params) { 
    var path = String.format('/app/components/{0}/{1}.view.html', params.module, params.controller); 
    return path; 
}; 

//================================================================================ 
route.controller='THIS IS WHAT I WANT TO CONSTRUCT FROM ROUTE as templateUrl' 
//================================================================================ 

route.resolve = { 
    loadDependencies: ['$q', '$rootScope', '$route', function ($q, $rootScope, $route) { 
     // MY RESOLVE LOGIC HERE 
     // I construct dependent file path from route values 
     // String.format('/app/components/{0}/{1}.controller.js', params.module, params.controller); 
    }] 
}; 

return route; 
}} 

app.provider('routeResolver', routeResolverProvider) 

Некоторые хорошие статьи: https://github.com/angular/angular.js/wiki/Understanding-Dependency-Injection https://medium.com/opinionated-angularjs/advanced-routing-and-resolves-a2fcbf874a1c

+0

'Я пытаюсь определить общий маршрут, который будет обрабатывать большую часть запроса. Не можете ли вы просто использовать' в противном случае'? – dfsq

ответ

1

Если я правильно понял ваш вопрос , то вы хотите иметь возможность создавать экземпляр контроллера по имени.

Это возможно в AngularJS, как описано в разделе Testing Controllers.

Вы должны использовать $controller услугу, как это:

$scope = $rootScope.$new(); 
$controller('NamedController', {$scope: $scope}); 

Вот рабочая plunker: http://plnkr.co/edit/AVCEdLS9zhIzCyZgcXZF?p=preview

0

Спасибо большое Дэн, я искал именно для этого вида тоже. Поэтому я изменяю свой резольвер, как и, наконец, его бинго.

this.$get = ['$rootScope', '$scope', '$route', '$controller', function() { 
    return this; 
}]; 

route.controller = function ($rootScope, $scope, $route, $controller) { 
    var params = $route.current.params; 
    $controller(params.controller.toLowerCase() + 'Controller', {$scope: $scope}); 
} 

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

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

  • Нет связанных вопросов^_^