使用默认参数,如何重写URL?

时间:2015-02-23 17:37:33

标签: angularjs angular-ui-router

我的路线有一个YYYY-MM-DD格式的日期可选参数。如果没有提供日期,我将提供今天的日期。 我这样定义了我的路线:

  .state('some.report', {
    url: '/report/:reportDate',
    templateUrl: 'app/report/report.html',
    params:{reportDate:moment().format('YYYY-MM-DD')},
    controller: 'reportCtrl',
    })

这有效,控制器中的参数确实是今天的日期,但网址仍为http://local/some/report/如何更改它以便网址变为:: http://local/some/report/2015-02-23

1 个答案:

答案 0 :(得分:3)

我想说,您的州定义应该有效,如this working example

所示

我们也可以使用 squash: false

设置强制它
    .state('some_report', {
      url: '/report/:reportDate',
      templateUrl: 'tpl.html',
      params: {
        reportDate: {
          value: moment().format('yyyy-MM-dd'),
          squash: false,
        }
      },
      controller: 'reportCtrl',
    });

有关此内容的更多信息,请访问:API reference $stateProvider

  

壁球 - {bool|string=}:壁球配置当前参数值与默认值相同时,URL中如何表示默认参数值。如果未设置压缩,则使用配置的默认压缩策略。 (参见defaultSquashPolicy())

     

有三种壁球设置:

     
      
  • false:参数的默认值不会被压扁。它被编码并包含在URL
  • 中   
  • true:URL中省略了参数的默认值。如果参数在状态的url声明中以斜杠开头并且后跟斜杠,则省略其中一个斜杠。这样可以提供更清晰的URL。
  •   
  • "<arbitrary string>":参数的默认值将替换为您选择的任意占位符。
  •   

检查here