如何解决如何通过过渡来维护未知/通配符queryParams?
我有一条路由(route-a
)转换为另一条路由(route-b
),并且我试图找到一种方法来使目标URL维护 all 查询参数,即使route-b
事先不知道这些参数。
例如,如果用户访问https://example.com/route-a/?var1=x&var2=y
,并且向route-b
的过渡是这样的:
afterModel(model,transition) {
this.transitionTo('route-b',model,{queryParams: transition.to.queryParams}) // transition route-a to route-b
}
...最终URL将为https://example.com/route-b/
-没有查询参数。
现在,我意识到“ Ember方式”是预先在route-b
的控制器上定义queryParams,但是在这种特殊用例中,我不预先知道queryParams 。路由B消耗了提供给它的所有查询参数,这意味着它们不可能事先枚举。
如何在不删除目标路由控制器未明确枚举的查询参数的情况下过渡到新路由?
有没有一种方法可以处理未知的queryParams,还是有一个queryParams通配符的概念(类似于*path
路由)?
解决方法
更新:我没有将其标记为答案,因为正如下面的jelhan指出的那样,为此文档使用计算属性明确标识为“否”。但这适用于我们的用例,也可能适用于其他用例,尽管我猜测如果您在其他路由中添加额外的queryParams
可能会崩溃,而这些其他路由在Ember尝试合并它们时可能会冲突。
上一个答案:
在这里,我的解决方案最终使用了Ember的computed
方法来通过解析URL自动生成查询参数数组。
queryParams: computed("router.location",function () {
let qp = this.get("router.location").getURL().split("?")[1];
if (qp) {
let qpAsObj = JSON.parse(
'{"' +
decodeURI(qp)
.replace(/"/g,'\\"')
.replace(/&/g,'","')
.replace(/=/g,'":"') +
'"}'
);
return Object.keys(qpAsObj)
}
})
如果您不希望随后在用户下次再次访问该页面(“ sticky query params”)时在页面/模型上维护这些查询参数,则还需要在该页面/模型上删除queryParams路线:
resetController(controller) {
// unset all queryParams when leaving the route
controller.queryParams.forEach(v => {
controller.set(v,null)
})
}
此解决方案不是...不是很理想,但是它可以正常工作,并且我们进行了测试,以确保如果以后发生错误,我们将捕获所有错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。