我正在使用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
状态的网址时才会看到此行为,而不会在任何其他状态加载。为什么会发生这种情况?我该如何解决?
答案 0 :(得分:2)
看起来你有一些很容易匹配的正则表达式。请注意,/answer/{id:[0-9]+}/edit/
始终与上述网址格式匹配:'{username:[a-zA-Z0-9\\-]+}/{slug:[a-z0-9\\-]+}/edit/