AngularJs ui-router访问直接的url param

时间:2016-01-14 12:50:25

标签: angularjs angular-ui-router

目前我正在构建一个webApp,我想创建一个链接,以便直接访问特定的用户,城市或公司。例如:

  • myapp.com/cityName
  • myapp.com/user321
  • myapp.com/BusinessName

我可以设置正确的名称,id或者param是什么。但问题是当我尝试访问此状态或其他页面时,它们会发生冲突。例如,如果我尝试转到具有此配置的主页:

.state('home', {
    url: '/Welcome',
    //..other configs
})

路由器尝试将网址作为参数获取,并将用户发送到公司,用户或城市的页面。

有没有办法实现这个结果?

编辑:

目前,为了避免这种冲突,我使用了这样的路由:

.state('city', {
    url: '/City/:cityName',
    //..other configs
})

但是,如果可能的话,我希望像这样使用:

.state('city', {
    url: '/:cityName',
    //..other configs
})

因为我希望用户能够通过在网址上直接输入名称来访问该页面。

1 个答案:

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