【问题标题】:Angular 2: Call service before bootstrapAngular 2:在引导之前调用服务
【发布时间】:2017-08-23 01:59:14
【问题描述】:

在引导我的 Angular 2 (v2.4) 时,我正在尝试运行一个函数,该函数将在应用程序加载之前自动授权用户。但是,这似乎不起作用。

import {platformBrowserDynamic} from "@angular/platform-browser-dynamic";
import {enableProdMode, APP_INITIALIZER} from "@angular/core";
import {Http, HttpModule} from "@angular/http";
import {PARAMETERS} from "../config/parameters";
import {AppModule} from "./AppModule";
import {UserRepository} from "../modules/service/repository/UserRepository";
import {SessionManager} from "../modules/service/manager/SessionManager";


export function auth(userRepository: UserRepository) {
    console.log("BOOM!");
    return () => userRepository.autoAuthorize();
};

platformBrowserDynamic().bootstrapModule(AppModule, [
    {
        provide: APP_INITIALIZER,
        useFactory: auth,
        deps: [UserRepository, SessionManager, HttpModule],
        multi: true
    }
])
    .catch(err => console.error(err));

我做错了什么,我怎样才能让它发挥作用?另外,如果我有上述代码,是否需要将这些服务添加到 AppModule 中的 providers 数组中?

非常感谢

JT

【问题讨论】:

    标签: angular


    【解决方案1】:

    将它依赖的服务添加到您已有的提供者列表中。

    ...
    platformBrowserDynamic().bootstrapModule(AppModule, {
         providers: [ UserRepository, SessionManager, HttpModule,
        {
            provide: APP_INITIALIZER,
            useFactory: auth,
            deps: [UserRepository, SessionManager, HttpModule],
            multi: true
        }
    ]});
    ...
    

    https://github.com/angular/angular/blob/4.0.0/packages/core/src/linker/compiler.ts#L90-L109

    对于编译器选项,您提供一个包含提供程序的对象。现在应该可以通过了解您要用于工厂的类来进行编译。

    请注意,您也可以在应用程序模块的提供程序列表中执行此操作,而不是在引导编译器选项中执行此操作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-20
      • 1970-01-01
      • 2017-02-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多