我可以在AngularJS中设置路由参数的默认值吗?有没有有办法/products/123,并/products/通过相同的途径来处理?
/products/123
/products/
我希望重构现有的代码,如下所示:
myModule.config(['$routeProvider', function($routeProvider) { $routeProvider. when('/products/', {templateUrl: 'products.html', controller: ProductsCtrl}). when('/products/:productId', {templateUrl: 'products.html', controller: ProductsCtrl}) }]); function ProductsCtrl($scope, $routeParams) { $scope.productId = typeof($routeParams.productId) == "undefined" ? 123 : $routeParams.productId; }
它可以工作,但不是很优雅。有没有更好的办法 ?
AngularJS 不允许使用路由参数的默认值。
AngularJS
但是(中的AngularJS)路由 不应具有默认参数。
资源可以具有默认参数。
在AngularJS如果你想使用一个可选的参数的路线,这实际上是两个不同的路线。
为什么?
路线应该很简单
路由不允许参数的正则表达式匹配
路由并不是公开API在您的应用程序中工作的东西(与Resources不同)。路由只是将URL与模板和控制器连接的配置。因此,拥有更多路线会更好:
很明显,哪个路由映射到哪个URL。
它比较冗长,但更易于阅读。拥有更复杂的路线会创建更陡峭的学习曲线,而AngularJS则不需要。
与具有路由的服务器端框架不同
更简单的路线=定义它们的路线更多=减少使用它们的麻烦。
注意 :请记住这个问题,这个答案是针对旧版本的AngularJS(我认为是1.0)的,该版本早于新的路由/资源实现。