2015-09-23 58 views
2

我有一個服務類應該調用的API,並返回結果:注射和使用HTTP Angular2

import {Component, View} from 'angular2/angular2'; 
import { Inject} from 'angular2/di'; 
import {Http} from 'angular2/http'; 

var httpMap = new WeakMap<ScheduleService, Http>(); 
export class ScheduleService { 
    meetings: Array<any>; 
    http: any; 

    constructor(@Inject(Http) http:Http){ 
     httpMap.set(this, http); 
     this.http = http; 

     //http.get('/api/sample') 
     // .map(response => response.json()) 
     // .subscribe(data => { 
     //  this.serverData = data; 
     //  }); 
    } 

    getMeetings(){ 
     var path = '/api/meetings/'; 
     return httpMap.get(this).get(path); 
    } 

} 

服務類被稱爲正確注射。我遇到的問題是,當我撥打getMeetings方法時,它永遠不會向/api/meetings發出請求。如果你們注意到構造函數中有一個get請求/api/sample,如果我取消註釋並運行該程序,那麼它的工作將會非常完美,因此我會檢查我的network選項卡,我可以看到請求已發出。

+1

我對弱引用的知識確實很差,所以我無法回答爲什麼這種方式不起作用,那麼,爲什麼不在你的'getMeetings()'方法中使用'this.http'? –

+0

@EricMartinez它基本上是一樣的東西。我只是在看一些正在做映射的博客,我只是覺得它看起來很髒,所以我試圖將它設置爲對象的屬性,看看它是否工作,它確實如此 – ThreeAccents

回答

1

看起來像http.get(path)不發送請求,除非您致電http.get(path).subscribe();,即使您對響應沒有做任何處理。

Plunker:https://plnkr.co/edit/b1fxoIUy31EHTC84U344?p=preview

在Plunker,在打開控制檯的網絡視圖,然後單擊隨着訂閱/沒有訂閱按鈕進行比較。

+1

觀察對象是懶惰的,並且在' subscribe()'或'toPromise()'被調用。 –