像cakephp这样的angularjs中的路由

像cakephp这样的angularjs中的路由,cakephp,routing,angularjs,Cakephp,Routing,Angularjs,我正在尝试用angularjs实现路由。但我希望以与cakephp相同的方式来完成它。 例如: 在cakephp中,如果我通过 blog/manager/users/index/page:2/sort:username/direction:asc 或 两者产生相同的结果。i、 e.cakephp理解url中以任何顺序传递的命名参数并不重要。 如果我在angularjs中也需要这样做呢? 目前,我在angularjs中为我的路由控制器编写了以下代码: angular.module('p

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

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

两者产生相同的结果。i、 e.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;
}]);
我是否需要对命名参数的每个组合进行硬编码?或者有解决方法吗?

您可以尝试以下方法:

当“/blog/manager/users/index/:param1/:param2/:param2,{templaeURL:'mytmpl',controller:MyCtrl}时


现在,param1、param2和param3可以接收任何内容,但是如果您想对必须在控制器中验证的参数执行某些操作,例如:MyCtrl。

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

使用上面的博客URL示例,下面是我如何用Angular编写这些URL的:

$routeProvider。 当“blog/manager/users/index/:page/:sort/:direction”时{ 控制器:blogController }. 当“blog/manager/users/index/:sort/:direction/:page”时{ 控制器:blogController };
如果您不希望为每个可能的参数组合和顺序创建路由,我建议查看resolve参数或编写一个监视路由事件的自定义params函数。

这是实现这一点的唯一方法吗?我的意思是,难道没有一种方法可以不用在控制器中进行验证就可以做到这一点吗?
    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;
}]);