2017-09-25 209 views
0

我有一個可能有很多數據的Angular 2的Kendo UI Grid。因此,我正在使用包含計數並將數據放在分頁網格中的API調用。當我點擊導出到Excel按鈕時,它只返回顯示的數據。我希望能夠導出整個數據集。Telerik Kendo UI Grid自定義Excel導出

我想我如下應該是使用fetchData方法,幷包括其在網格:

<kendo-grid-excel fileName="MyExport.xlsx" [fetchData]="allResults"></kendo-grid-excel> 

然而,allResults方法必須返回一個ExcelExportData對象。我對API的方法調用返回一個被解析的observable。我試圖在訂閱事件中返回數據,但它給了我一個TypeScript錯誤,該方法必須返回一個值。如果我將返回類型更改爲「任何」,則在獲取外部應用的過濾器時,我會調用「this」時失敗。

這是我目前獲取方法:

allResults(): ExcelExportData { 
    if (!this.sort.length) { 
     this.sort.push({ field: undefined, dir: undefined }); 
    } 

    this.myService.resultsGet(
     this.filters.date, 
     ... 
     undefined, // skip 
     undefined, // take 
     this.sort[0].field, 
     this.sort[0].dir 
    ).subscribe(
     (pagedList: any) => { 
      for (let item of pagedList.results) { 
       // manipulate a few things here 
      } 
      return { data: pagedList.results }; 
     }, 
     e => { console.log(`error: ${e}`); } 
    ); 
} 

有什麼辦法來設置此作採用了棱角分明的分量濾波器,並通過訂閱返回數據的外部API調用?

在此先感謝!

回答

0

它看起來像有兩件事情正在進行:

  • 未定義:fetchData是不是在你的組件實例的範圍內調用,所以你需要自己綁在

    this.allResults = this.allResults.bind(this); 
    
  • 返回值:假設您的服務正在從服務器獲取,您需要返回一個promise或observable來獲取數據,所以你不想訂閱(),你想地圖()

全部放在一起,你會得到這樣的事情:

constructor(
    public myService: MyService 
    ) { 
    this.allResults = this.allResults.bind(this); 
    } 

    allResults() { 
    if (!this.sort.length) { 
     this.sort.push({ field: undefined, dir: undefined }); 
    } 

     this.myService.resultsGet(
     this.filters.date, 
     ... 
     0, // skip 
     undefined, // take 
     this.sort[0].field, 
     this.sort[0].dir 
    ).map(response => { 
     // manipulate a few things here 
     return <GridDataResult> { 
      data: response.value, 
      total: response.count 
     } 
    } 

更新:這裏是一個這是根據Telerik的例子之一顯示出來的。

excel export plunker

+0

感謝您對這個未定義的提示!回報仍然是一個問題。我遇到的問題是網格僅包含導出中所需的數據子集。我已經有了你爲我用來加載網格的方法的所有結果編寫的代碼(儘管我使用訂閱而不是地圖)。這工作正常,因爲網格可以處理Observables。當我單擊「導出到Excel」按鈕時,我需要一組用於返回ExcelExportData類型(allResults():ExcelExportData)的myService.resultsGet方法的不同參數。將返回放在地圖中返回一個void。坎登能做到這一點嗎? – ChristyPiffat

+0

我不確定你在問什麼。我在上面添加了一個顯示獲取所有數據並修改它的運算器。 –