2017-08-14 92 views
0

我正在使用Wijmo的wjFlexGridDetail指令,並希望根據組件中的「detailData」數組是否包含任何匹配數據來控制哪些行顯示詳細網格。 rowHasDetail屬性使用外部網格的行作爲輸入並返回布爾值的函數。我想要做這樣的事情:將任意數據傳遞給子指令

<ng-template wjFlexGridDetail let-item="item" [rowHasDetail]="hasDetail"> 

hasDetail (row): boolean { 
    return this.detailData.filter(item => item.ID === row.dataItem.ID).length > 0 
} // detailData is undefined when I try this 

但是,這並不工作,因爲this在函數的範圍是指wjFlexGridDetail對象,其中不包含我想覈對數據。我試着結合它作爲數據屬性:

<ng-template wjFlexGridDetail let-item="item" [rowHasDetail]="hasDetail" [attr.data-detail]="detailData"> 

,但得到了一個錯誤:

Uncaught (in promise): Error: Template parse errors: Property binding data-detail not used by any directive on an embedded template. Make sure that the property name is spelled correctly and all directives are listed in the "@NgModule.declarations".

有另一種方式來獲得這些數據到函數的範圍是什麼?或者專門用於wjFlexGridDetail的用法,是否有另一種方法來實現我的目標(我希望它只顯示具有詳細數據的行的+擴展按鈕)?

回答

0

我發現了一個解決方案,但它感覺像差Angular,所以希望仍然有更好的答案。

bind函數可以將任何數據添加到函數的作用域。不是直接傳入函數,而是調用一個返回函數並將數據綁定到該函數的函數。

<ng-template wjFlexGridDetail let-item="item" [rowHasDetail]="hasDetail()"><!-- note the() --> 

hasDetail(): (row) => boolean { 
    return function (row): boolean { 
     return this && this.filter(item => item.ID === row.dataItem.ID).length > 0 
    }.bind(this.detailData) 
} 

更改功能detailData的範圍內允許進行比較,但它確實沒有覺得做事情的「正確」的方式。

相關問題