【问题标题】:ui-router: Default value for param not shown in URLui-router:参数的默认值未显示在 URL 中
【发布时间】:2016-07-10 18:32:55
【问题描述】:

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

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

这是状态配置:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-10-06
      • 1970-01-01
      • 1970-01-01
      • 2018-12-11
      • 2011-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多