【问题标题】:routing in angularjs like cakephpangularjs 中的路由,如 cakephp
【发布时间】:2012-09-24 08:21:34
【问题描述】:

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

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

【问题讨论】:

    标签: cakephp routing angularjs


    【解决方案1】:

    你可以试试这个:

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

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

    【讨论】:

    • 这是实现此功能的唯一方法吗?我的意思是有没有一种方法可以在不验证控制器的情况下做到这一点?
    【解决方案2】:

    在 PHP(或任何后端语言)中,由于 mod_rewrite 和 $_GET 对象,您可以灵活地使用 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 参数或编写一个自定义参数函数来监视路由事件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多