如何在 Angular 5 中的应用程序范围启动时加载列表(http 调用)?

2024-03-03

我希望在启动时加载数据,例如使用 LocationsService 的国家/地区。

我已经实现了当前的服务:

...

@Injectable()
export class LocationsService {

  public countries: Country[];

  constructor(private http: HttpClient) {
  }

  public getCountries() {
    if (this.countries.length == 0) {
        this.http.get<Country[]>(`${this.url}`)
        .subscribe(data => { this.countries = data; },
            err => console.error(err),
            () => console.log(this.countries)
        )
    };
    return this.countries;
  }

}

我尝试将服务放入引导程序中:

bootstrap: [AppComponent, LocationsService]

但它不起作用(实际上引发错误)。我需要这种类型的列表从启动时就可用(仅加载 1 次)。谢谢!


使用APP_初始化器

首先更改您的服务而不是返回数据,而是返回 Observable

@Injectable()
export class LocationsService {

  public countries: Country[];

  constructor(private http: HttpClient) {
  }

  public getCountries() {
    if (this.countries.length == 0) {
        return this.http.get<Country[]>(`${this.url}`);
    };
    return new Observable( c => {
      c.next(this.countries);
      c.complete();
   });
  }

}

创建一个用于设置的服务

@Injectable()
export class SetupLocations {



  constructor(private loc: LocationsService ) {
  }

  public initliaze(): Promise<any> {
    return new Promise((resolve, reject) =>{
        this.loc.getCountries().subscribe((response) =>{

         //Do whatever you want here.

         //always call resolve method, because it will freeze your app.   
         resolve(true);

       }, (err) =>{});
     })
  }

}

接下来在主模块中初始化它

import { NgModule, APP_INITIALIZER } from "@angular/core";



//create a function outside in the class module
export function SetupApp(setup: SetupLocations) {
    return () => setup.initliaze();
}



 @NgModule({
   providers: [
     SetupLocations,
     { 
        provide: APP_INITIALIZER,
        useFactory: SetupApp,
        deps: [SetupLocations],
        multi: true
     }]
})
export class AppModule {}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Angular 5 中的应用程序范围启动时加载列表(http 调用)? 的相关文章

随机推荐

  • 垂直或水平调整 div 大小

    如何在不使用 css 属性的情况下调整 div 垂直或水平大小 仅使用纯 javascript 代码从高度或宽度调整大小 HTML div div This is the top side s content div div div div
  • 如何强制 Git (2.5+) HTTP 传输更喜欢 SPNEGO 而不是基本身份验证?

    Summary 我正在使用 Git for Windows 2 5 1 通过 Kerbesized Git 服务器进行身份验证 当我使用表单中的 URL 时https el2 gitlab sa c kkm GrammarTools git
  • 导出到 Apps 脚本 web 应用程序的图表数据为空

    我有一个 Google 表格 我正在使用它作为我的团队正在开展的项目的数据库 我想做的是使用这些数据在 Google 网站上构建不同的屏幕 例如 我已经能够添加一个显示所有活动项目的下拉列表 选择项目后 将返回并显示 HTML 表格 现在
  • 如何在 VSC 中注释/取消注释 jsx(使用键盘 `cmd /`)?

    谁能告诉我如何在 VSC 中注释 JSX 代码 我看了下面列出的文章 似乎都没有给出具体的解决方案 而且票证似乎已经关闭 声称评论 取消评论功能已在VSC上得到妥善解决 但是 按照建议尝试以下方法后 我仍然遇到问题 在 VSC 上禁用 su
  • 二维数组的线性排序

    我是 C 编程新手 正在尝试编写一些排序程序 我编写了线性 正常排序的程序 现在我想做一个程序来对二维数组进行排序 即如果矩阵是 4 6 1 3 2 9 5 7 8 那么结果应该是 1 2 3 4 5 6 7 8 9 由于您希望 2D 数组
  • 控制 genoPlotRplot_gene_map 中的边距

    我正在制作一个plot gene map数字由genoPlotR R包 它给出了一个水平系统发育树 其中与每个叶子对齐的是一个基因组片段 这是一个简单的例子 说明了我的用法和问题 The plot gene map函数需要一个ade4的包p
  • 使用 django Rest 框架在验证步骤之前修改数据

    我有一个简单的Model存储创建它的用户ForeignKey 该模型有对应的ModelSerializer and ModelViewSet 问题是当用户提交一个POST要创造一个新记录 user应该由后端设置 我尝试覆盖perform c
  • 如何(可移植地)使用 C++ 类层次结构和动态链接库

    好吧 我知道可移植性不是 C 的强项 但我必须让我的代码在 Mac 和 Windows 上运行 我已经提出了一种解决方案 但它并不完美 我有兴趣看看是否有人可以提出更好的解决方案 我需要在多个 DLL 包中使用类层次结构 例如 我有一个抽象
  • iOS 6 视图加载期间的设备方向处理?

    我有一个标签栏应用程序 我使用的是 XCode 4 3 3 我已经升级到 4 5 2 带有 iOS6 的东西 我的代码在shouldAutorotateToInterfaceOrientation每个视图都会检查当前设备方向并正确放置所有
  • 如何在 XAML 中构建控件网格?

    我正在尝试按照规范在 WPF 中构建 UI UI 用于编辑项目集合 每个项目都有一个可编辑的字符串属性 以及 UI 需要显示的可变数量的只读字符串 它可能看起来像这样 或者 根据数据 可能有不同数量的文本标签列 文本列的数量是完全可变的 可
  • 由于通道 url 不兼容,设备未接收 C# Windows 推送通知

    经过几个小时的试用 我仍然无法向我的应用程序发送推送通知 这就是我到目前为止所做的 激活服务于https appdev microsoft com 得到了SID 我们调用它ms app s 1 23 4 12345678901 123456
  • GCC 值得在 Windows 上使用来替代 MSVC 吗?

    我目前在 Windows 上使用 Visual Studio 2010 使用 C 进行开发 在 C 11 正式发布后 我开始使用 MSVC 中已经提供的一些功能 但是 正如预期的那样 绝大多数新更改都不受支持 我想也许即将推出的 Visua
  • Javascript 是“缓存”操作吗?

    我正在用 Javascript 实现 Levenshtein 距离函数 我想知道用维基百科的示例 星期日 和 星期六 运行它需要多少时间 所以我用了console time and console timeEnd 以确定函数执行所花费的时间
  • 水晶报表 - 最后一页为空白

    我有一个水晶报告 生成时最后一页是空白的 除了页脚 指示当前页面以及报告标题 仅当倒数第二页上显示的数据完全填满页面时才会发生这种情况 有人知道为什么会这样吗 当您选中复选框时新页面之后 您会看到一个图标就在它旁边 这个图标代表配方工作坊
  • 从 AngularJS 中的两个资源调用返回 $promise 以延迟路由更改

    Use Case 使用路由提供程序 在解析中返回 promise 将避免 UI 加载后弹出数据 但是 我在处理两个不同的资源调用并将其作为单个数组返回时遇到问题 目前的实施 当前的实现有效 但要求控制器需要两个资源 var app angu
  • 无法使用 MAVEN 进行构建,出现错误 - 无法执行目标 org.apache.maven.plugins:maven-compiler-plugin:3.1:compile

    我一直在尝试使用maven 构建代码 但我遇到了一个错误 该代码可在此 github 存储库中找到 谷歌播放爬虫 https github com Akdeniz google play crawler 我的maven显示的系统配置如下 A
  • 如何修改Solr给出的搜索结果页面?

    我打算做一个利基搜索引擎 我使用 apache nutch 1 6 作为爬虫 使用 apache solr 3 6 2 作为搜索器 我必须说 网络上有关这些技术的更新信息非常少 我按照这个教程http wiki apache org nut
  • ServletContext getRealPath 方法 - 什么是虚拟路径?

    我正在阅读的文档getRealPath String s http docs oracle com javaee 5 api javax servlet ServletContext html getRealPath 28java lang
  • 如何更改日期选择器中的日期格式

    在我的 iPhone 应用程序中 我需要显示日期yyyy MM dd格式如下图所示 但在 iPhone 日期选择器中 它的格式为月 日 年这对于我的申请来说不统一 我尝试更改日期选择器的本地值 不同国家 地区 但仍以默认格式使用它 如何根据
  • 如何在 Angular 5 中的应用程序范围启动时加载列表(http 调用)?

    我希望在启动时加载数据 例如使用 LocationsService 的国家 地区 我已经实现了当前的服务 Injectable export class LocationsService public countries Country c