我正在尝试在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;
}]);
我是否需要对命名参数的每个组合进行硬编码?或者有解决方案吗?
答案 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
参数或编写一个监视路由事件的自定义参数函数。