UI路由器空参数导致导航到错误的路由

时间:2016-08-23 23:37:05

标签: javascript angularjs angular-ui-router

这应该很简单,但我无法弄清楚。

我有两条路线:

$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路由会导致控制台错误,这很难解决。

这很容易解决吗?

2 个答案:

答案 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