angularjs ui-router父状态,子状态后参数加载

时间:2016-05-05 13:30:15

标签: javascript angularjs angular-ui-router

我有父母和子女。 父状态用于查看/编辑客户,子状态是创建的。 如果父状态没有参数,它们都可以正常加载:

.state('crm.customer', {
    url: 'crm/customers/',
    templateUrl: 'src/modules/crm/views/customer.html',
    controller: 'customersController'
})
.state('crm.customer.create', {
    url: 'crm/customers/create',
    templateUrl: 'src/modules/crm/views/customer.html',
    controller: 'customersController'
})

当我将customerId参数添加到父状态,并且我加载子状态时,首先加载子状态,然后立即切换到父状态:

.state('crm.customer', {
    url: 'crm/customers/:customerId',
    templateUrl: 'src/modules/crm/views/customer.html',
    controller: 'customersController'
})
.state('crm.customer.create', {
    url: 'crm/customers/create',
    templateUrl: 'src/modules/crm/views/customer.html',
    controller: 'customersController'
})

如何在子状态加载后阻止加载父状态?

1 个答案:

答案 0 :(得分:1)

这是因为当您访问/crm/customers/create时,两个州的网址都匹配。为了解决这个问题,请定义param的类型。根据{{​​3}},有几种方法可以在url中定义params,其中一种方法是使用花括号:'/user/{id:int}'

在您的情况下,请使用

.state('crm.customer', {
  url: 'crm/customers/{customerId:int}',
  templateUrl: 'src/modules/crm/views/customer.html',
  controller: 'customersController'
})

以便/crm/customers/create只匹配孩子的状态。