像cakephp一样在angularjs中路由

时间:2012-09-24 08:21:34

标签: cakephp routing angularjs

我正在尝试在angularjs中实现路由。但我希望以与cakephp相同的方式实现。 例如: 如果我通过像

这样的东西,在cakephp中
blog/manager/users/index/page:2/sort:username/direction:asc 

blog/manager/users/index/sort:username/direction:asc/page:2

都会产生相同的结果。即cakephp以任何顺序理解在url中传递的命名参数(顺序无关紧要)。 如果我需要在angularjs中做同样的事情怎么办? 现在,我在angularjs中对路由控制器进行了以下编码:

    angular.module('productapp', []).
    config(['$routeProvider', function($routeProvider) {
    $routeProvider.
        when('/productapp', {templateUrl: 'partials/productList.html', controller: productsCtrl}).
        when('/productapp/:productId', {templateUrl: 'partials/edit.html', controller: editCtrl}).
        otherwise({redirectTo: '/productapp'});
        }], 
        ['$locationProvider', function($locationProvider) {
            $locationProvider.html5Mode = true;
}]);

我是否需要对命名参数的每个组合进行硬编码?或者有解决方案吗?

2 个答案:

答案 0 :(得分:0)

你可以试试这个:

when('/blog/manager/users/index/:param1/:param2/:param2, {templaeURL: 'mytmpl', controller: MyCtrl}).

现在param1,param2和param3可以接收任何内容,但如果你想对你必须在控制器中验证的参数做一些事情(例如:MyCtrl)。

答案 1 :(得分:0)

在PHP(或任何后端语言)中,由于mod_rewrite和$_GET对象,您可以灵活地使用您的URL。在JavaScript中,我们必须添加免费提供给我们的所有额外逻辑。

将上面的示例与博客网址一起使用,以下是我在Angular中编写这些内容的方法:

$routeProvider.
    when('blog/manager/users/index/:page/:sort/:direction', {
        controller: blogController
    }).
    when('blog/manager/users/index/:sort/:direction/:page', {
        controller: blogController
    });

如果您不希望为每个可能的组合和参数顺序创建路径,我建议查看resolve参数或编写一个监视路由事件的自定义参数函数。