angular - 在Angular中尽快调用服务中的函数?
问题描述
我的页面应该尽快从后端 (Contentful.com) 加载内容。我在一个额外的服务中加载后端内容,该服务在我的根模块中注册。如何确保getContent()
尽快调用此服务中的函数?:
import { Injectable } from '@angular/core';
import {environment} from 'src/environments/environment.local';
@Injectable({
providedIn: 'root'
})
export class GetContentService {
constructor() { }
getContent() {
loadingMyContentIntoAnObservable.then(content =>
console.log("received the content", content");
}
}
我的想法是创建一个 Home 组件,该组件在构造函数中具有服务,然后在ngOnInit()
该组件调用getContentService.getContent()
中。但这是最快的方法吗?(我知道这只是几毫秒的问题,但我想学习正确/最好的方法......)
解决方案
如果您想在应用程序启动之前调用后端作为引导的一部分,您可以使用APP_INITIALIZER。
用法:
function initializeApp(): Promise<any> {
return new Promise((resolve, reject) => {
// Do some asynchronous stuff
resolve();
});
}
@NgModule({
imports: [BrowserModule],
declarations: [AppComponent],
bootstrap: [AppComponent],
providers: [{
provide: APP_INITIALIZER,
useFactory: () => initializeApp,
multi: true
}]
})
export class AppModule {}
但是您必须注意,这会延迟应用程序的启动时间,并且大多数时间不是您想要的,因为您无法为调用您的应用程序的用户提供有意义的视觉反馈。
推荐阅读
- typescript - 类型“{}”上不存在 Typescript 错误属性“成员”
- node.js - 如何停止执行(默认):DROP TABLE IF EXISTS in sequelize sync
- java - JPA/Hibernate5 通过序列名称获取序列 nextval
- javascript - 如何根据指定属性以外的属性数量将对象附加到数组?
- php - Laravel:5.6 在新的 gaurd 上重定向我的用户登录页面
- javascript - 作用域时如何使我的javascript函数异步
- ios - 当弹出一个 UIWebViewController 然后返回到 UITabBarController 时标签栏的高度会改变
- mongodb - Mongo DB投影问题
- spring - Spring-boot:LocalDateTime 控制器参数(真的用尽了)
- microsoft-translator - How to use Custom Translator service for new language pair