一尘不染

angularjs路由可以具有默认参数值吗?

angularjs

我可以在AngularJS中设置路由参数的默认值吗?有没有有办法/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;
}

它可以工作,但不是很优雅。有没有更好的办法 ?


阅读 311

收藏
2020-07-04

共1个答案

一尘不染

AngularJS 不允许使用路由参数的默认值。

但是(中的AngularJS)路由 不应具有默认参数。

资源可以具有默认参数。

AngularJS如果你想使用一个可选的参数的路线,这实际上是两个不同的路线。

为什么?

  • 路线应该很简单

  • 路由不允许参数的正则表达式匹配

  • 路由并不是公开API在您的应用程序中工作的东西(与Resources不同)。路由只是将URL与模板和控制器连接的配置。因此,拥有更多路线会更好:

    • 很明显,哪个路由映射到哪个URL。

    • 它比较冗长,但更易于阅读。拥有更复杂的路线会创建更陡峭的学习曲线,而AngularJS则不需要。

与具有路由的服务器端框架不同

  • AngularJS路由没有名称。
  • 您不从定义的路由中构建URL。
  • 路由定义中没有逻辑(即功能)。

更简单的路线=定义它们的路线更多=减少使用它们的麻烦。

注意 :请记住这个问题,这个答案是针对旧版本的AngularJS(我认为是1.0)的,该版本早于新的路由/资源实现。

2020-07-04