我正在尝试使用 canActivate 保护来验证 url 参数,如果它们不匹配,那么应用程序应该重定向。到目前为止,我有以下内容:
@Injectable()
export class NodeInfoDetailGuard implements CanActivate {
constructor(
private _store: Store<NodeInfoRouteState>,
private _router: Router,
) {}
canActivate(route: ActivatedRouteSnapshot): Observable<boolean | UrlTree> {
const {
systemId,
nodeName,
} = route.params;
const itemIsMatch = (item: ResourceResponseItem<NodeInfo>) =>
item && item.payload.systemId === systemId && item.payload.nodeName === nodeName;
// If nodeName or systemId not present, parses a string to a UrlTree
if (!systemId || !nodeName) {
return of(this._router.parseUrl('/node-info'));
}
// Otherwise, validate route parameters and check for match
this._store.dispatch(new SelectNodeInfoAction({ systemId, nodeName }));
return this._store.pipe(
select(getNodeInfoSelectedItem),
filter((item: ResourceResponseItem<NodeInfo>, index: number) => index >= 1 || itemIsMatch(item)),
map(item => itemIsMatch(item) || this._router.parseUrl('/node-info')),
);
}
}
如果我已经在浏览器中运行了该应用程序,则此方法有效,如果我使用的是新选项卡,则重定向不起作用。如果 nodeName 或 systemId 不匹配,应用程序会尝试从商店分派