功能从构造函数注入更改为inject()函数

问题描述 投票:0回答:1

我的项目中有以下守卫:

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() 函数无法获取实例并且始终为空,所以任何人都可以帮助我解决这个问题吗? 谢谢

angular dependency-injection inject injection-tokens
1个回答
0
投票

我想用这个

const ssrManager: SsrManager = inject('SSR_MANAGER', { optional: true });
© www.soinside.com 2019 - 2024. All rights reserved.