多个角度应用初始化器

时间:2017-08-03 07:43:37

标签: angular

我们知道在root模块提供程序中,我们可以设置一个if (!empty($_POST["category"])) { $pdt = $_POST['category']; $sql = "SELECT * FROM library_details WHERE bookcategory='$pdt'"; $res = mysql_query($sql); $output = '<option value="">Select from here</option>'; while ($row = mysql_fetch_array($res)) { $output .= '<option value="' . $row["bookname"] . '">"' . $row["bookname"] . '"</option>'; } echo $output; } 来引导后端的一些依赖项,然后加载第一个组件

APP_INITIALIZER

我将以上述方式在应用程序启动之前加载我的用户配置,但我想更多地进行更多操作,例如在应用程序启动之前连接websocket。

我知道我可以在我编写的{ provide: APP_INITIALIZER, useFactory: configLoader, multi: true, deps: [ConfigService] } 函数中执行,首先加载配置,然后在该configLoader函数中连接websocket,但由于某些原因,我现在不能这样做,所以我需要做的就像这样:

configLoader

但不幸的是,它不起作用。那么有没有办法加载多个应用程序初始化程序?

1 个答案:

答案 0 :(得分:9)

useFactory不应该是一个数组

{
    provide: APP_INITIALIZER,
    useFactory: websocketLoader,
    multi: true,
    deps: [ConfigService, WebsocketService]
},
{
    provide: APP_INITIALIZER,
    useFactory: configLoader,
    multi: true,
    deps: [ConfigService, WebsocketService]
}

multi: true为多个提供商提供相同的密钥(APP_INITIALIZER),不会覆盖前一个(使用multi: false的行为),但DI会将它们收集到一个数组中本身。