2014-01-21 2 views
2

Я использую библиотеку маршрутизатора AngularUI, и у меня есть странная проблема: у меня есть два разных, но похожих состояния и контроллеры. То, что происходит, - это состояние, которое я ожидал бы запускает, но затем запускается другое состояние: оно выбирает шаблон urrl, а затем контроллер запускается для второго состояния, что вызывает какое-то странное поведение.Угловой ui.router, выполняющий более одного состояния

Состояние вопроса:

angular.module('app', ['ui.route']) 
.config(function ($urlRouterProvider, $stateProvider) { 
    $urlRouterProvider.otherwise("/"); 

    $stateProvider 
    .state('list', { 
     url: "/", 
     templateUrl: STATIC_URL + "js/eleagemot/views/list.html", 
     controller: 'questionListCtrl', 
    }) 
    .state('detail', { 
     url: '/{username:[a-zA-Z0-9\\-]+}/{slug:[a-z0-9\\-]+}/', 
     templateUrl: STATIC_URL + "js/eleagemot/views/detailed_question.html", 
     controller: 'questionDetailCtrl' 
    }) 
    .state('newQuestion', { 
     url: '/new-question/', 
     templateUrl: STATIC_URL + "js/eleagemot/views/edit_question.html", 
     controller: 'editQuestion' 
    }) 
    .state('questionEdit', { 
     url: '/{username:[a-zA-Z0-9\\-]+}/{slug:[a-z0-9\\-]+}/edit/', 
     templateUrl: STATIC_URL + "js/eleagemot/views/edit_question.html", 
     controller: 'editQuestion' 
    }) 
    .state('answerEdit', { 
     url: '/answer/{id:[0-9]+}/edit/', 
     templateUrl: STATIC_URL + "js/eleagemot/views/edit_answer.html", 
     controller: "editAnswer" 
    }) 
}); 

Именно то, что происходит, если я пойду в /answer/1/edit/ это первое загружает edit_answer.html шаблон и запускает контроллер editAnswer, как и положено. Но затем он также загружает шаблон edit_question.html и запускает контроллер editQuestion. Я знаю, потому что в контроллере editAnswer есть правильный код, который корректно работает, а затем некоторый аналогичный код, который выполняется в контроллере editQuestion, но это вызывает 404, а затем маршрутизатор перенаправляет его в корневой каталог. Кроме того, размещение некоторых консольных журналов в верхней части каждого контроллера показывает, что работает контроллер editAnswer, а затем контроллер editQuestion.

Это поведение наблюдается только при загрузке URL-адреса для состояния answerEdit, а не для какого-либо другого состояния. Почему это происходит и как я могу это исправить?

+0

Возможно, вы должны разместить свой '' '' редактор editAnswer''', чтобы мы могли это посмотреть. Возможно, это может вызвать проблему. –

ответ

2

Похоже, что у вас есть регулярные выражения, которые слишком легко сочетаются. Обратите внимание, что /answer/{id:[0-9]+}/edit/ всегда соответствует указанному выше шаблону URL: '{username:[a-zA-Z0-9\\-]+}/{slug:[a-z0-9\\-]+}/edit/

+1

А, спасибо. Я добавил «/ question» перед тем, что касается вопросов. – cellofellow

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