这应该很简单,但我无法弄清楚。
我有两条路线:
$stateProvider
.state('users', {
url: '/users',
views: {'@': {
templateUrl: 'templates/users.tpl.html',
controller: 'UsersCtrl as users'
}}
})
.state('users.edit', {
url: '/{userId}',
views: {'@': {
templateUrl: 'templates/editUser.tpl.html',
controller: 'EditUserCtrl as editUser'
}}
});
如果您使用ui-sref或$ state.go导航到"用户"按名称状态,但是如果您在URL栏中键入domain.com/users/,它将进入具有空userId参数的编辑状态,即使在尾随存储后没有任何内容。
通常情况下这不会有问题,但是在没有userId的情况下触发editUser路由会导致控制台错误,这很难解决。
这很容易解决吗?
答案 0 :(得分:1)
答案 1 :(得分:0)
您的州定义应为
$ stateProvider
.state('users', {
url: '/users',
views: {'@': {
templateUrl: 'templates/users.tpl.html',
controller: 'UsersCtrl as users'
}}
})
.state('users.edit', {
url: '/edit/{userId}',
views: {'@': {
templateUrl: 'templates/editUser.tpl.html',
controller: 'EditUserCtrl as editUser'
}}
});
您的子状态网址应为' / edit / {userId}'。当我们创建子状态时,其url会自动添加其父状态url。因此,如果您的网址是' / {userId}'它将是' domain.com/users/ {userId}'。这就是为什么domain.com/users/导航到具有null参数值的州users.edit。
https://github.com/angular-ui/ui-router/wiki/nested-states-%26-nested-views