2016-04-21 36 views
0

我剛剛開始玩角度2,我遇到了一個小問題,我搜索了各種形式和angulars文檔。Angular 2將ajax調用響應轉移到另一個組件

我設法做了一個調用服務,然後我想在一個組件中,當我按下一個按鈕加載另一個組件與dynamicload組件,並有權訪問ajax結果。

的問題是,我可以T弄清楚如何做到這一點..

的問題是,如何才能讓結果使用觀測量或承諾方法的其他組件入店。

回答

0

如果我正確理解您的問題,您正在尋找一種方法將數據從請求插入另一個嵌套組件。

我希望這張圖片能夠爲你澄清這種情況下的數據流。

Component interaction

  1. 根組件調用返回給你承諾對象服務的方法。
  2. 然後將響應中所需的數據映射到根組件模型內的根組件模型構造函數中。
  3. 並且您的子組件應該預訂您在上一步中準備的模型。

    ngOnInit() { 
    this.dataService.getSomeData() 
        .subscribe((data: IData) => { 
         this.data = data; 
        }); 
    

    }

正上方如何在根組件從承諾對象設置模式向局部模型短的例子。

最新研究:

還有另一種方式,通過從API的數據來填充你的組件。您可以使用EventEmitter從服務中發出事件,然後,您可以在您創建的組件內部訂閱此事件,以便他們將獲得一個數據,每次都會調用該服務。這是第一個答案中這個策略的很好的例子。 Service Events

希望它能幫助你,讓我知道你是否需要額外的信息!

+0

Mikki謝謝,但我可以在另一個組件不是兒童組件嗎?他們是無關的,一個注入另一個槽dynamiccomponentload .. –

+0

@Obretin我不知道你的架構,有點難以理解爲什麼你需要這種情況下,如果你在哪裏使用ng1,我會說你應該使用'event broadcasting'但是ng2正在使用更嚴格的數據流概​​念。因此,您可以嘗試從父組件調用服務,或者可能提供更多詳細信息,並且我會幫您高興:) – Mikki

+0

以及我可能做錯事情的東西,但我在頁面頂部有一個搜索框,以及何時我按下提交按鈕我想要在頁面中間加載另一個組件(或者從一開始就加載它),並且在從API接收到答案後,用答案填充組件模板。事情是,如果我打電話的組件呈現,但沒有阿賈克斯電話..如果您有任何意見,請告訴我..有點新的整個角2東西 –

0

只需創建一個服務,然後在需要的地方注入服務。 這是一個例子,如何要共享許多組件服務AJAX的數據,而不發出請求兩次: https://stackoverflow.com/a/36413003/2681823

服務:

@Injectable() 
export class DataService { 
    constructor(private http: Http) { } 

    private _dataObs = new ReplaySubject<request>(1); 

    getData(forceRefresh?: boolean) { 
    // On Error the Subject will be Stoped and Unsubscribed, if so, create another one 
    this._dataObs = this._dataObs.isUnsubscribed ? new ReplaySubject(1) : this._dataObs; 

    // If the Subject was NOT subscribed before OR if forceRefresh is requested 
    if (!this._dataObs.observers.length || forceRefresh) { 
      this.http.get('http://jsonplaceholder.typicode.com/posts/2') 
       .subscribe(
       requestData => { 
        this._dataObs.next(requestData); 
       }, 
       error => this._dataObs.error(error)); 
     } 

     return this._dataObs; 
    } 
} 

組件:

@Component({ 
    selector: 'child', 
    template : `<button (click)="makeRequest()" class="btn">Click me!</button>` 
}) 
export class Child { 
    constructor(private _dataService: DataService) { } 

    makeRequest() { 
    this._dataService.getData().subscribe( 
     requestData => { 
      console.log('ChildComponent', requestData); 
     } 
    } 
} 

一個完整的工作示例/猛擊可以在這裏找到:http://plnkr.co/edit/TR7cAqNATuygDAfj4wno?p=preview

+0

坦克@tibs,但我已經做到了這一點..它現在是我在找什麼..順便說一句,我看到有一百萬種方法可以做到這一點 –

+0

讓我們說你有一種形式,當submited調用API響應,然後結果必須轉到另一個組件,將使用響應 –

+0

即使在這個來自plunker的例子中,我如何處理模板中的* ngFor中的響應 –

相關問題