我有一个简单的users.list状态,配置如下:
$stateProvider.state('users.list', {
url: '/users/list?type',
reloadOnSearch: false,
templateUrl: 'templates/users/list.html',
params: {
type: { value: 'all' },
},
});
我试图强制类型参数始终显示在网址中。当我点击ui-sref
指令生成的链接时,效果很好。当我直接在浏览器中访问/users/list
时会出现问题。尽管param已正确配置为$state.params
,但它不会显示在URL中。
通常这不是一个大问题,但是当你需要使用季节性参数时它会成为一个问题。例如,想象一下,默认情况下,我只想列出从过去一周到现在注册的新用户。我可以设置一个参数from
,其默认值为today - 7 days
,每天都会有所不同。
因此,当用户与某人共享没有param的url时,会造成很多麻烦,例如:"嘿,从我的顶部删除第三个,它是作弊。 &#34 ;.如果收到邮件的人决定在另一天打开网址,则列表会有所不同,您可以看到我担心的内容。
我无法找到任何可以帮助我的东西,所以我在这里问。有谁做过吗?这可行吗?
答案 0 :(得分:1)
我们只需要使用设置壁球:
.state('users.list', {
url: '/users/list?type',
reloadOnSearch: false,
templateUrl: 'templates/users/list.html',
params: {
type: {
value: 'all',
squash: false,
},
},
});
检查here
有关详细信息,请参阅以下内容:
EXTEND(updated working plunker)
如果我们希望初始页面也使用默认值,我们可以使用 .otherwise()
设置:
//$urlRouterProvider.otherwise('/users/list');
$urlRouterProvider.otherwise(function($injector, $location) {
var state = $injector.get('$state');
state.go('users.list');
return $location.path();
});
检查that in action here并在此处阅读更多详细信息:
答案 1 :(得分:0)
我建议只在URL中创建一个没有state参数的状态,onEnter函数重定向到填充了所需参数的状态。