目前我正在构建一个webApp,我想创建一个链接,以便直接访问特定的用户,城市或公司。例如:
我可以设置正确的名称,id或者param是什么。但问题是当我尝试访问此状态或其他页面时,它们会发生冲突。例如,如果我尝试转到具有此配置的主页:
.state('home', {
url: '/Welcome',
//..other configs
})
路由器尝试将网址作为参数获取,并将用户发送到公司,用户或城市的页面。
有没有办法实现这个结果?
目前,为了避免这种冲突,我使用了这样的路由:
.state('city', {
url: '/City/:cityName',
//..other configs
})
但是,如果可能的话,我希望像这样使用:
.state('city', {
url: '/:cityName',
//..other configs
})
因为我希望用户能够通过在网址上直接输入名称来访问该页面。
答案 0 :(得分:1)
如果我理解你,你可能想要这样的东西。
.state('home', {
url: '/welcome',
//..other configs
})
.state('cities', {
url: '/cities/:parameter'
})
这样就可以消除冲突。
更新:您还可以创建一个包含排除参数的数组,如果参数不在排除列表中,则重定向到其他状态。
.state('home', {
url: '/:slug',
//..other configs
})
.state('cities', {
url: '/cities/:slug'
})
var excludedWords = ['welcome', 'homepage'];
$rootScope.on('$stateChangeStart', function(event) {
if(excludedWords.indexOf($stateParams.slug) !== -1) {
event.preventDefault();
$state.go('cities', $stateParams);
}
});
这样,如果用户进入/欢迎,他/她将无法重定向到/ cities / welcome页面,但如果他/她进入/ newyork,他/她将被重定向到/ cities / newyork