我的状态是我的应用程序的入口点。但是,输入页面需要日期参数才能显示列表。如果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中?
答案 0 :(得分:3)
您可以使用urlRouterProvider
重定向传入路径,并附加默认日期。 urlRouterProvider
将更新浏览器位置。
$urlRouterProvider.when("/openJobs/", function() {
return "/openJobs/" + getFormattedCurrentDate();
});
如果状态与州名称匹配(通过ui-sref
或$state.go()
),浏览器位置将使用url
路径进行更新。
然而,如果状态与url
路径匹配,则浏览器位置将不会更新,因为它已与url
匹配。这就是为什么您需要在案例中使用$urlRouterProvider
来附加日期的原因。