如何将AngularJS路由更改为文件?param1 =a¶m2= b格式?

时间:2014-11-04 09:12:44

标签: angularjs url-routing angular-ui-router

我需要更改现有的AngularJS应用程序,使用以下格式的URL:

example.com/thePage/#/section/1/subsection/1 

制作章节&服务器可读的子部分参数,格式如下:

example.com/thePage?section=1&subsection=1

环境不提供类似mod_rewrite的东西,所以我需要在Angular中更改路由以使其处理&生成这些URL。我相信我可以使用$locationProvider.html5Mode(true);来做到这一点但是我不知道如何从那里开始。我已经尝试将现有路由更新为类似下面的内容,但是它无法返回视图(就好像路由不起作用。

$stateProvider  
            .state('section', {
                abstract: true,
                url: '?section',
                views: {
                    'header': {
                        template: '<h3></h3>'
                    },
                    'main': {
                        templateUrl: constants.baseUrl + 'views/section.html',
                        controller: 'sectionCtrl',
                        resolve: {

                            section: ['sectionervice', '$stateParams',
                                function (sectionervice, $stateParams) {
                                    return sectionervice.getsection($stateParams);
                }],
                            subsection: ['sectionervice', '$stateParams',
                                function (sectionervice, $stateParams) {
                                    return sectionervice.getsubsection($stateParams);
                }]
                        }
                    }
                }
            })
            .state('section.detail.subsection', {
                url: '&subsection=:sectionId',
                views: {
                    'main': {
                        templateUrl: constants.baseUrl + 'views/section.detail.subsection.html',
                        controller: 'DictionaryCtrl'
                    }
                }
            });

$stateProvider似乎只能使用正斜杠(/)参数分隔符。还有另一种方法来实现这一目标吗?

1 个答案:

答案 0 :(得分:0)

在ui-router网站上有一个你想要做的简单例子。

也许你可以做同样的事情,看看RouteProvider和StateProvider设置。

url:http://angular-ui.github.io/ui-router/sample/app/app.js

在服务器端,您可以检索网址,以便获取参数。

[编辑]

关于$locationProvider.html5Mode(true);您可以执行此操作并在路由和状态提供商中进行设置,不会干扰功能