我有一个逻辑问题,当感觉可行时我无法通过observable解决。它是(我期望)工厂模式的一部分?
问题是: - 我有一个带参数'p'的Class'Cl'。 - 在'Cl'构造函数中,我发出一个http请求来获取p的正确值(是的,这部分感觉也很奇怪) -'Cl'有一个吸气剂,它返回'p'或其中的一部分。
当我做instance = new CL(); instance.get();
当然我的http请求尚未完成。所以'p'是未定义的。
只有当p得到定义时,getter才能返回一个可以接受的observable吗?
也许有些代码会更好地解释这种情况:
import {lot of thigs } from '@angular/core'; //and RxJs
@Component({
//...
})
export class aClass {
private p:any
constructor() {
this.p = return this.Http.get('a/route')//let's say this request take AGE
.map((response) => {
return response.json();
});
}
//Obviously no working cause cause p isn't "define yet"
public getP(index){
return this.p[index];
}
//I'd hope something like this would work but it doesn't.
public getObservableP(index): Observable<any>{
return Observable.of(this.p[index]);
}
}
你能否告诉我如何返回一个Observable(或者如果它应该是一个Promise),当p是instanciate时,它将满足。感谢。
(我已经阅读了几个关于constuctor中的http请求的内容很糟糕,也许我的构思错了。)
答案 0 :(得分:1)
如果发布的代码充当服务,最好的方法是使用这样的异步管道:
import {lot of thigs } from '@angular/core'; //and RxJs
@Component({
//...
})
export class aClass {
private p:any
constructor() {
this.p = return this.Http.get('a/route')//let's say this request take AGE
.map((response) => {
return response.json();
});
}
public getP(index){
return this.p;
}
}
在组件中,您将注入aClass并在模板中:
<div *ngFor="let something of aClass.getP() | async">
{{something}}
</div>
或
<p>{{aClass.getP() | async}}</p>