首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在我的angular应用程序中输入APP_INITIALIZER时,出现"this.appInits[i]不是一个函数“的错误

在我的angular应用程序中输入APP_INITIALIZER时,出现"this.appInits[i]不是一个函数“的错误
EN

Stack Overflow用户
提问于 2020-06-21 05:47:19
回答 1查看 861关注 0票数 0

我正在尝试在我的站点中实现https://www.npmjs.com/package/keycloak-angular,这样我的前端angular应用程序就可以使用Keycloak对用户进行身份验证。

在放入代码后,我一直收到以下错误:

代码语言:javascript
复制
ERROR TypeError: this.appInits[i] is not a function
    at ApplicationInitStatus.runInitializers (core.es5.js?de3d:2807)
    at eval (core.es5.js?de3d:4506)

有人知道为什么会发生这种事吗?我使用的是Angular 4.3.2和keycloak-angular 7.2.0以及keycloak-js 8.0.2。

以下是我的大部分app.module.ts:

代码语言:javascript
复制
import {NgModule, APP_INITIALIZER} from '@angular/core';
import { KeycloakService, KeycloakAngularModule } from 'keycloak-angular';
import { initializer } from './utils/app-init';
...

@NgModule({
    imports: [
        ...
        KeycloakAngularModule
    ],
    declarations: [
        ...
    ],
    providers: [
        ...
        {
            provide: APP_INITIALIZER,
            useFactory: initializer,
            multi: true,
            deps: [KeycloakService],

            useClass: OdpToastOptions
        }
    ],
    bootstrap: [JhiMainComponent]
})

export class UiAppModule {}

下面是我的app-init.ts:

代码语言:javascript
复制
export function initializer(keycloak: KeycloakService): () => Promise<any> {

    keycloak.init({
        config: {
            url: 'https://keycloak.mydomain.com/auth',
            realm: 'myrealm',
            clientId: 'myclient',
        },
        initOptions: {
            onLoad: 'login-required',
            checkLoginIframe: false,
        },
        enableBearerInterceptor: true,
        bearerExcludedUrls: ['/assets', '/clients/public'],
    });

    return (): Promise<any> => keycloak.init();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-21 06:04:17

您不能在提供程序中同时拥有useFactoryuseClass。我想应该从这个提供程序中删除useClass: OdpToastOptions

代码语言:javascript
复制
{
    provide: APP_INITIALIZER,
    useFactory: initializer,
    multi: true,
    deps: [KeycloakService],

    useClass: OdpToastOptions // <-- REMOVE LINE
}

这可能会解决这个问题:

代码语言:javascript
复制
{
    provide: APP_INITIALIZER,
    useFactory: initializer,
    multi: true,
    deps: [KeycloakService],
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62492092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档