Angular ui.router执行多个状态

时间:2014-01-21 21:32:21

标签: javascript angularjs angular-ui angular-ui-router

我正在使用AngularUI的路由器库,我有一个奇怪的问题:我有两个不同但相似的状态和控制器。发生的情况是我期望运行的状态,但是然后另一个状态似乎运行:它获取templateUrl然后控制器运行第二个状态,这会导致一些奇怪的行为。

有问题的州:

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状态的网址时才会看到此行为,而不会在任何其他状态加载。为什么会发生这种情况?我该如何解决?

1 个答案:

答案 0 :(得分:2)

看起来你有一些很容易匹配的正则表达式。请注意,/answer/{id:[0-9]+}/edit/始终与上述网址格式匹配:'{username:[a-zA-Z0-9\\-]+}/{slug:[a-z0-9\\-]+}/edit/