角度:绑定可观察和评估的结果

时间:2019-02-07 11:04:58

标签: angular observable bind

我想拥有

这样的结构
MyStruc {
   action2Execute:any; // see #q3

   constructor(coll: CollectionServices) {
    // see #q1
   }
}

并具有类似的ServiceClass

MyServiceClass {
  constructor(public http: HttpClient) { }

  myHTTPRequest(id:number):Observable<boolean>{
     this.http.get<boolean>('call/my/webservice/'+id)
  }
}

和类似Controller的

MyControllerClass {

  constructor(private coll: CollectionServices) {}
  ...
  execHTTP() {
     new MyStruc(coll).action2Execute.apply(1);
  }

}

现在,我的目的是将action2Exectue绑定到方法myHTTPRequest上,对其进行调用并处理结果。我对此有两个问题

  1. 如果我将action2Execute设置为this.action2Execute=coll.myHTTPRequest,则在MyControllerClass.#execHTTP()中调用它时遇到了问题,我会收到一条错误消息: TypeError: Cannot read property 'get' of undefined ==> httpundefined

  2. 我的另一个问题是,仅使用apply并不能从可观察到的结果(即HTTP请求)获得结果。

  3. action2Exectue类中,MyStruc应该是哪种类型?

1 个答案:

答案 0 :(得分:0)

我弄清楚了如何声明它:

MyStruc {
   action2Execute:((id:number) => Observable<any>);

   constructor(coll: CollectionServices) {
     // to bind it to the Service ...
     this.action2Execute=coll.myHTTPRequest.bind(coll);
   }
}

我可以像正常的Observable一样称呼它

MyControllerClass {
...
 constructor(private coll: CollectionServices) {}
  ...
  execHTTP() {
     new MyStruc(coll).action2Execute(1).subscribe(res => console.log(res));
  }
}