【问题标题】:Angular 5 APP_INITIALIZER causes Cylic DependencyAngular 5 APP_INITIALIZER 导致循环依赖
【发布时间】:2018-07-22 04:13:54
【问题描述】:

类似于Angular 5 APP_INITIALIZER gives Cyclic dependency error

我有一个使用 Angular 5 和 SSR 的应用程序,我刚刚从 Angular 4 升级了它,一切都很好。

现在,当我使用 APP_INITIALIZER 时,出现上述错误。我环顾四周,我能找到的最好的与需要注入路由器有关,但我不使用路由器!任何关于这方面的指导都会很棒,在此先感谢!

代码如下:

在我的提供者和功能中:-

  SettingsProvider,
  { provide: APP_INITIALIZER, useFactory: settingsProviderFactory, deps: [SettingsProvider], multi: true }

export function settingsProviderFactory(provider: SettingsProvider) {
  return () => provider.load();
}

服务:

import { HttpClient } from "@angular/common/http";
import { Injectable } from "@angular/core";
import { Subject } from "rxjs";
import { ConfigSetting } from "../../models/config.model";


@Injectable()
export class SettingsProvider {

    private settings: any = null;
    private baseUrl: string;

    public subject: Subject<any> = new Subject();

    constructor(private http: HttpClient) {

    }

    load() {
        return new Promise((resolve, reject) => {
            this.http
              .get('http://localhost:54601/api/configuration')
                .subscribe(response => {
                    this.settings = response;
                    resolve(true);
                    console.log(response)
                })
        })
    }

    public getEventSetting(): boolean {
        return true /*this.settings['events'];*/
    }
    public getReviewSetting(): boolean {
        return true /*this.settings['reviews'];*/
    }
    public updateSettings(settings: ConfigSetting): void {
        this.settings = settings;
        this.subject.next();
    }

}

编辑:好的,我可能是错的,但看起来可能与 HttpClient 有关。我删除了它,它似乎工作......有点大声笑我可以收到一条消息到控制台。不过我需要http!我尝试添加超时并注入它,但没有奏效。

【问题讨论】:

  • 嗯..你能放一个plunkr吗?总的来说,除非您的 deps: [SettingsProvider]settingsProviderFactory(provider: SettingsProvider) {...} 冲突,否则我看不到循环依赖注入。您是否尝试过删除它然后投放?
  • 您使用的是哪个确切版本的 Angular?你有没有声明任何 http 拦截器?
  • @David 我正在使用 Angular 5.0.0 我没有使用任何拦截器。该服务仅使用 http.get 从 API 获取一些设置。
  • 如果我删除应用程序启动的deps,但显然这消除了拥有它的意义..
  • 这是一个 plunkr,但我似乎从来没有让他们工作! plnkr.co/edit/G5aW6pUEX8Q2FhKmHUKy?p=preview

标签: angular angular5 cyclic-dependency


【解决方案1】:

是的,所以问题是 HttpClient。

我将它换成了“@angular/http”中的旧 {Http};在@NgModule 中导入模块并且它可以工作。

【讨论】:

  • 可能不是一个长期的解决方案,因为它已经被弃用了:(我修改了你的 plunkr 并且没有循环依赖问题(我只是评论了一些 rx 代码,因为我无法让它在 plunkr 中加载) plnkr.co/edit/CpBDwAN4Lqv6RZB3Ql6l?p=preview
【解决方案2】:

问题已通过使用 app.browser.module 而不是共享的 app.module 解决

【讨论】:

    猜你喜欢
    • 2020-12-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 2014-04-15
    • 2021-09-27
    • 2015-06-08
    相关资源
    最近更新 更多