ui-router:URL中未显示param的默认值

时间:2016-07-09 11:57:12

标签: angularjs angular-ui-router default-value

我的状态是我的应用程序的入口点。但是,输入页面需要日期参数才能显示列表。如果URL中未提供日期,则将其配置为使用当前日期。

从技术上讲,一切正常。默认值传递给控制器​​,控制器可以使用它来加载一些数据,但它不会在URL中显示日期。

这是州配置:

$stateProvider.state('openJobs', {
      controller: 'openJobsCtrl as openJobs',
      params: {
        shippingDate: {
          value: getFormattedCurrentDate(),
          squash: false
        }
      },
      templateUrl: 'openJobs.html',
      url: '/openJobs/:shippingDate'
    });

我创建了一个工作plunkr来演示行为(在新窗口中运行以查看URL更改)。如果我创建ui-sref openJobs链接,则会在网址中显示默认值。但是,如果有人通过输入http://host.com/openJobs/直接打开页面,则默认值将在后台使用,但不会显示在网址中。

如何实现这一点,无论状态如何打开,默认值都会显示在URL中?

1 个答案:

答案 0 :(得分:3)

您可以使用urlRouterProvider重定向传入路径,并附加默认日期。 urlRouterProvider将更新浏览器位置。

    $urlRouterProvider.when("/openJobs/", function() {
        return "/openJobs/" + getFormattedCurrentDate();
    });

如果状态与州名称匹配(通过ui-sref$state.go()),浏览器位置将使用url路径进行更新。

然而,如果状态与url路径匹配,则浏览器位置将不会更新,因为它已与url匹配。这就是为什么您需要在案例中使用$urlRouterProvider来附加日期的原因。