2015-03-20 5 views
0

я застрял со следующей конфигурацией маршрута:RouteProvider использует свойство разрешения от другого определения маршрута

app.config(function ($routeProvider) { 
    $routeProvider 
     .when('/common/query/:query', { 
      templateUrl: 'common.html', 
      controller: 'UsualResultsController', 
      resolve: { 
       UsualResults: usualCntrl.performSearch 
      } 
     }) 
     .when('/people/query/:query', { 
      template: 'people.html', 
      controller: 'PeopleResultsController', 
      resolve: { 
       PeopleResults: peopleCntrl.performSearch 
      } 
     }) 
     .when('/people/query/:query/department/:department', { 
      template: people.html', 
      controller: 'PeopleResultsController', 
      resolve: { 
       PeopleResults: peopleCntrl.performSearch 
      } 
     }) 
     .otherwise({ 
      redirectTo: '/' 
     }); 
}); 

и кажется, что каждый коммутационный маршрут разрешен с «решимостью» объектом из последнего определения. Упрощенный plunkr.

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

Кроме того, я полагаю, что последние два определения маршрута могут быть объединены в один, но я снова не мог понять, как его достичь.

Буду признателен за вашу помощь, ребята!

+0

пытаются объявить завод подобного http://odetocode.com/blogs/scott/archive/2014/05/ 20/using-resolve-in-angularjs-routes.aspx – nada

ответ

1

app.controller не возвращает контроллер, но модуль (такой же, как angular.module).

В вашем примере следующее:

peopleCntrl.performSearch = function($timeout, $q) { ... }; 

заменит функция определяется по формуле:

usualCntrl.performSearch = function($timeout, $q) { ... }; 

Так как peopleCntrl и usualCntrl относятся к одному объекту модуля.

Хотя, возможно, это не самое чистое решение, оно будет работать, если вы не используете одно и то же имя для функций.

Другим решением было бы следующее:

var usualCntrl = function UsualResultsController($scope) { ... }; 

app.controller('UsualResultsController', ['$scope', usualCntrl]); 

usualCntrl.performSearch = function($timeout, $q) { ... }; 

Демо:http://plnkr.co/edit/jx6HYDXggsaq3qMOdF8c?p=preview

+0

спасибо! Это хорошо работает. Я пропустил тот факт, что функция «controller» фактически возвращает экземпляр модуля. Итак, я просто изменил имена функций. – ChernikovP

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