2015-11-03 126 views
1

我目前正在开发一个用于管理用户身份的SPA。我现在有一个问题,为角度ui路由器中的状态定义URL。AngularJS ui路由器:带参数和无参数的URL

这是我想通了,至今:

.state('identity', { 
     url: '/identity/:serialNumber', 
     templateUrl: 'app/components/Identity/identity.html', 
     controller: 'identityController' 
    }) 
    .state('addidentity', { 
     url: '/identity/add', 
     templateUrl: 'app/components/Identity/identityAdd.html', 
     controller: 'identityController' 
    }); 

的第一状态( “身份”)获得通过URL放慢参数 “SERIALNUMBER”。这工作正常,我可以访问“identityController”内的参数。

我想用第二个状态(“addidentity”)实现的是,对于访问“/ identity/add”的特殊情况,我想重定向到不同的模板(也许使用不同的控制器未来)。

但是,这不起作用。只有第一个状态。第二个被忽略。据我所知,问题是,即使我访问“/身份/添加”,这个URL在技术上仍然符合第一个状态。在这种情况下,状态参数“serialNumber”将简单地设置为“add”。

我想我有一个问题,理解ui路由器的工作原理。 有没有在ui路由器中处理这两个URL的方法不同?

也许在我想到这个方面有一些根本性的错误。任何帮助,将不胜感激:)

问候,

蒂莫

+0

你能提供更多文件吗?特别是html文件和控制器 – uksz

+0

除了console.log($ stateParams.serialNumber);'外,控制器中没有任何东西。我还没有开始实施更多的功能。 – Timo

+0

通过改变映射它会像'/ identity/find /:serialNumber'一样工作 –

回答

0

您可以验证的URL与正则表达式: https://github.com/angular-ui/ui-router/wiki/URL-Routing#regex-parameters

例如如果您的序列号是一个整数,下面将使URL只匹配整数:

.state('identity', { 
    url: '/identity/{serialNumber:[0-9]{1,8}}', 
    templateUrl: 'app/components/Identity/identity.html', 
    controller: 'identityController' 
}) 
.state('addidentity', { 
    url: '/identity/add', 
    templateUrl: 'app/components/Identity/identityAdd.html', 
    controller: 'identityController' 
}); 
+0

那就是它!谢谢。 因为serialNumber总是一个整数值,所以这个效果很好。 – Timo