1

我正在尝试在 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;
}]);

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

4

2 回答 2

0

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

使用上面的示例和博客 URL,以下是我在 Angular 中编写这些的方式:

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

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

于 2013-01-23T01:32:50.097 回答
0

你可以试试这个:

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

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

于 2012-09-24T16:15:30.563 回答