我的项目中有以下守卫:
import { isPlatformServer } from '@angular/common';
import { Inject, Injectable, Optional, PLATFORM_ID } from '@angular/core';
@Injectable()
export class Session2Guard implements CanActivate {
constructor(
@Inject(PLATFORM_ID) private platfirmId: Object,
@Inject('SSR_MANAGER') @Optional() private ssrManager?: SsrManager
) {}
canActivate(route: ActivatedRouteSnapshot): Observable<boolean | UrlTree> {
if (isPlatformServer(this.platfirmId)) {
this.ssrManager.preventSsr();
}
}
}
我想将其更改为函数守卫,如下所示:
import { inject, InjectionToken, PLATFORM_ID } from '@angular/core';
import { isPlatformServer } from '@angular/common';
import { CanActivateFn } from '@angular/router';
import { Observable, of } from 'rxjs';
export const SessionGuard: CanActivateFn = (): Observable<boolean> => {
const platformId: Object = inject(PLATFORM_ID);
const ssrManager: SsrManager = inject(new InjectionToken('SSR_MANAGER'), {
optional: true,
});
if (isPlatformServer(platformId)) {
return of(true);
}
};
当我进行更改时,inject() 函数无法获取实例并且始终为空,所以任何人都可以帮助我解决这个问题吗? 谢谢
我想用这个
const ssrManager: SsrManager = inject('SSR_MANAGER', { optional: true });