2014-01-21 40 views
2

我使用AngularUI的路由器庫,我有一個奇怪的問題:我有兩個不同但相似的狀態和控制器。發生什麼是我期望運行的狀態,但是另一個狀態似乎運行:它取回模板UI,然後控制器運行第二個狀態,這會導致一些奇怪的行爲。角度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控制器。我知道,因爲有一些Restangular代碼在editAnswer控制器中正確運行,然後在editQuestion控制器中運行一些類似的Restangular代碼,但會導致404,然後路由器將重定向到根。同時在每個控制器的頂部放置一些控制檯日誌,可以看出editAnswer控制器正在運行,然後是editQuestion控制器。

此行爲僅在加載answerEdit狀態的url時出現,並且不適用於其他任何狀態。爲什麼會發生這種情況,我該如何解決?

+0

您應該發佈您的editAnswer控制器,以便我們也可以查看。這可能會導致問題。 –

回答

2

看起來你有一些正則表達式太容易匹配。請注意,/answer/{id:[0-9]+}/edit/總是與上面的網址格式匹配:'{username:[a-zA-Z0-9\\-]+}/{slug:[a-z0-9\\-]+}/edit/

+1

啊,謝謝。我在問題面前添加了「/問題」。 – cellofellow