您可以使用以下代码进行导航,我已经进行了检查,以避免无限循环,因为导航会调用解析程序,解析程序会再次进行导航,以此类推,所以此检查将确保在所有查询参数都存在时停止导航。我希望它能解决你的问题
import { inject } from '@angular/core';
import {
ActivatedRouteSnapshot,
Router,
RouterStateSnapshot,
} from '@angular/router';
import { of } from 'rxjs';
import { switchMap, tap } from 'rxjs/operators';
import { CodeService } from '../services/code.service';
export const queryParamsResolver = (
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot
) => {
const router = inject(Router);
const productId = route.paramMap.get('id');
const status = route.queryParamMap.get('status');
const code = route.queryParamMap.get('code');
if (!productId) {
return of(undefined);
}
// is possible navigate from here instead of send the data the component
return inject(CodeService)
.getQueryParamerts(+productId)
.pipe(
switchMap((query: any) => {
if (!status || !code) {
return router.navigate([state.url], {
queryParams: query,
queryParamsHandling: 'merge',
});
}
return of(true);
})
);
};
stackblitz