在aurelia路由器中创建导航计划时出现错误的查询
我们在项目中使用aurelia open id connect,成功登录后,重定向将从url中删除查询字符串。我通过aurelia路由器进行了调试,我想我找到了一些东西。是否应该在那里使用重定向指令中的查询字符串在aurelia路由器中创建导航计划时出现错误的查询,aurelia,Aurelia,我们在项目中使用aurelia open id connect,成功登录后,重定向将从url中删除查询字符串。我通过aurelia路由器进行了调试,我想我找到了一些东西。是否应该在那里使用重定向指令中的查询字符串 export const buildRedirectPlan = (instruction: NavigationInstruction) => { const config = instruction.config; const router = instruction
export const buildRedirectPlan = (instruction: NavigationInstruction) => {
const config = instruction.config;
const router = instruction.router;
return router
._createNavigationInstruction(config.redirect)
.then(redirectInstruction => {
const params: Record<string, any> = {};
const originalInstructionParams = instruction.params;
const redirectInstructionParams = redirectInstruction.params;
for (let key in redirectInstructionParams) {
// If the param on the redirect points to another param, e.g. { route: first/:this, redirect: second/:this }
let val = redirectInstructionParams[key];
if (typeof val === 'string' && val[0] === ':') {
val = val.slice(1);
// And if that param is found on the original instruction then use it
if (val in originalInstructionParams) {
params[key] = originalInstructionParams[val];
}
} else {
params[key] = redirectInstructionParams[key];
}
}
let redirectLocation = router.generate(redirectInstruction.config, params, instruction.options);
// Special handling for child routes
for (let key in originalInstructionParams) {
redirectLocation = redirectLocation.replace(`:${key}`, originalInstructionParams[key]);
}
let queryString = instruction.queryString;
// use redirectInstruction.queryString instead?
if (queryString) {
redirectLocation += '?' + queryString;
}
return Promise.resolve(new Redirect(redirectLocation));
});
};
export const buildRedirectPlan=(说明:导航说明)=>{
const config=instruction.config;
const router=instruction.router;
返回路由器
.\u createNavigationInstruction(config.redirect)
。然后(重定向指令=>{
常量参数:记录={};
const originalInstructionParams=指令.params;
const redirectInstructionParams=redirectInstruction.params;
for(输入重定向指令参数){
//如果重定向上的参数指向另一个参数,例如{route:first/:this,redirect:second/:this}
设val=redirectInstructionParams[key];
if(typeof val=='string'&&val[0]==':'){
val=val.slice(1);
//如果在原始指令中找到该参数,则使用它
if(原始指令参数中的val){
params[key]=originalInstructionParams[val];
}
}否则{
params[key]=重定向指令params[key];
}
}
让redirectLocation=router.generate(redirectInstruction.config,params,instruction.options);
//儿童路线的特别处理
for(输入originalinstruction参数){
redirectLocation=redirectLocation.replace(`:${key}`,originalInstructionParams[key]);
}
设queryString=instruction.queryString;
//是否改用redirectInstruction.queryString?
如果(查询字符串){
重定向位置+='?'+查询字符串;
}
返回承诺.解析(新重定向(重定向位置));
});
};
这是最新历史浏览器模块的问题,aurelia router使用该模块处理片段。请确保您使用了1.3.1:
npm i aurelia历史记录-browser@1.3.1
并等待传入版本。对不起this@bigopon我现在使用的是aurelia历史浏览器的1.3.1版,仍然是同一个问题。我想你是对的。对不起,没有仔细准备好问题。这似乎有一段时间是错误的,per v1.6.3将很快修复。我正在处理此场景的测试,您能否帮助创建一个问题,并提供至少一些伪代码来演示此问题和复制?@bigopon我现在打开了一个问题。