当前位置: 首页 > 面试题库 >

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

孟海
2023-03-14
问题内容

我可以在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;
}

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


问题答案:

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

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

资源可以具有默认参数。

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

为什么?

  • 路线应该很简单

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

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

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

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

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

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

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

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



 类似资料:
  • 问题内容: 我可以设置带有可选参数的路由(相同的模板和控制器,但是如果某些参数不存在,则应将其忽略)? 因此,只编写一个规则,而不是编写以下两个规则? 这样的事情([此参数是可选的]) 我在他们的文档中找不到任何内容。 问题答案: 看来Angular现在已对此提供支持。 从最新的(v1.2.0)文档中: 可以包含带问号()的可选命名组

  • 问题内容: 我在Google上搜索并不断提出“不,这是不可能的”,但是这些帖子的发布日期为2005-2007,所以我想知道是否已更改。一个代码示例: 解决方案之一是传递null,然后检查null并设置变量。我不想这样做,也不必这样做。如果这是真的,那么MySql开发人员需要唤醒,因为我可以用MSSQL做更多的事情。 问题答案: 仍然不可能。

  • 问题内容: 在Cherrypy中,可以这样做: 问题答案: Flask网站上有一个片段,涉及烧瓶的“全包”路线。 基本上,装饰器通过链接两个URL过滤器来工作。页面上的示例是: 这会给你:

  • 问题内容: 我正在使用JavaScriptSerializer序列化一些实体对象。 问题是,许多公共属性都包含空值或默认值。有什么方法可以使JavaScriptSerializer排除具有null或默认值的属性? 我希望得到的JSON不再那么冗长。 问题答案: 对我有用的解决方案: 序列化的类和属性将如下装饰: IsRequired是关键项。 实际的序列化可以使用DataContractJsonS

  • 问题内容: 我正在尝试定义一个可选的查询参数,该参数将映射到,但当URL中不存在该参数时: …并且我本质上想检查它是否传入: 但是,出现编译错误: 类型不匹配; 找到:Null(null)必需:Long请注意,隐式转换不明确,因为它们是模棱两可的:类LowPriorityImplicits中类型为(x:Null)Long的方法Long2longNullConflict和对象类型为(x:Long)L

  • 对于一些函数,你可能希望它的一些参数是 可选 的,如果用户不想要为这些参数提供值的话,这些参数就使用默认值。这个功能借助于默认参数值完成。你可以在函数定义的形参名后加上赋值运算符(=)和默认值,从而给形参指定默认参数值。 注意,默认参数值应该是一个参数。更加准确的说,默认参数值应该是不可变的——这会在后面的章节中做详细解释。从现在开始,请记住这一点。 使用默认参数值 例7.5 使用默认参数值 #!