【发布时间】:2020-02-20 13:13:54
【问题描述】:
我有一个大项目,我在其中对 API 进行了几次 HTTP GET 调用以获取不同的数据。我想将它们组合在一个调用中(我已经创建了它并且我已经将所有数据嵌套在 json 中),问题是我无法在组件之间传递数据。让我解释一下这个问题。这是电话:
get(entityType: string): Promise<any> {
return this.http
.get<any>(
this.location.prepareExternalUrl("./assets/temp-data/LEV_page/organisation.json")
)
.take(1)
.toPromise();
}
在我的主要组件中,我这样做:
public entityType:string;
public dataSource;
constructor(private levsService: LinkedEntityVocabulariesService) {}
ngOnInit() {
this.entityType = localStorage.getItem("currentEntityType");
this.levsService.get(this.entityType).then(data => {
this.dataSource = data;
});
}
如果我想在该组件中使用dataSource,它可以正常工作,但是当我尝试像这样将它传递给子组件时:
<app-properties [send]="dataSource"></app-properties>
然后在那里访问它:
@Input("send") send;
constructor() {}
ngOnInit() {
console.log("test", this.send);
}
我得到的只是test undefined,因为它会在接收到数据之前传递它(尽管我认为使用Promise 而不是Observable 会阻止它)。
无论如何,我的问题是: 我可以调用获取数据然后在组件之间传递而不是再次调用 api 吗?如果是的话,我该怎么做上面的例子? 提前致谢!
【问题讨论】:
-
我在使用
@Input装饰器时遇到了类似的问题。如果您必须等待数据并在数据到达后执行某些操作,请使用OnChanges接口来检测数据何时到达。作为替代方案,您可以使用服务并将收到的数据存储在主题中,例如BehaviourSubject。 -
我将它与来自 rxjs 的 observable 结合使用。 ` mySubject: BehaviourSubject
= new BehaviourSubject (null); myObservable$: Observable = mySubject.asObservable(); ` -
你的意思是,就像在这个例子中一样? stackoverflow.com/a/42185519/12094093
-
跟帖子有点不同。请参阅我的最后评论。
标签: node.js angular optimization angular-promise