将任意数据传递给子指令
Passing arbitrary data to a child directive
我正在使用 Wijmo 的 wjFlexGridDetail
指令,并希望根据组件中的 "detailData" 数组是否包含任何匹配数据来控制哪些行显示详细信息网格。 rowHasDetail
属性 采用一个函数,该函数使用外部网格的行作为输入,returns 是一个布尔值。我想做这样的事情:
<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
用法,是否有另一种方法可以实现我的目标(我希望它只显示具有详细数据的行的 + 扩展按钮)?
我找到了解决方案,但感觉很糟糕 Angular 所以希望还有更好的答案。
bind
函数可以将任何数据添加到函数的范围内。不要直接传入函数,而是调用一个 returns 函数并将数据绑定到它的函数。
<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
可以进行比较,但感觉确实不像"correct"的处理方式。
我正在使用 Wijmo 的 wjFlexGridDetail
指令,并希望根据组件中的 "detailData" 数组是否包含任何匹配数据来控制哪些行显示详细信息网格。 rowHasDetail
属性 采用一个函数,该函数使用外部网格的行作为输入,returns 是一个布尔值。我想做这样的事情:
<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
用法,是否有另一种方法可以实现我的目标(我希望它只显示具有详细数据的行的 + 扩展按钮)?
我找到了解决方案,但感觉很糟糕 Angular 所以希望还有更好的答案。
bind
函数可以将任何数据添加到函数的范围内。不要直接传入函数,而是调用一个 returns 函数并将数据绑定到它的函数。
<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
可以进行比较,但感觉确实不像"correct"的处理方式。