在我的一个项目中,我尝试在表格中显示Angular Components(例如自动完成下拉搜索)。由于我的要求(例如使用ctrl单击多次选择不同的单元格),我决定尝试使用handsontable。
我使用了handsontable渲染器并动态添加组件。
代码看起来像这样
matrix.component.ts
this.hot = new Handsontable(this.handsontable.nativeElement, {
data: this.tableData,
colWidths: [80, 300],
colHeaders: ['Id', 'Custom Component'],
columns: [
{
data: 'id',
},
{
data: 'id',
renderer: (instance: any, td: any, row: any, col: any, prop: any, value: any, cellProperties: any) => {
if (cellProperties.hasOwnProperty('ref')) {
(cellProperties.ref as ComponentRef<CellContainerComponent>).instance.value = row;
} else {
cellProperties.ref = this.loadComponentAtDom(
CellContainerComponent,
td,
((component: any) => {
component.template = this.button4Matrix;
component.value = row;
}));
}
return td;
},
readOnly: true,
},
],
});
private loadComponentAtDom<T>(component: Type<T>, dom: Element, onInit?: (component: T) => void): ComponentRef<T> {
let componentRef;
try {
const componentFactory = this.componentFactoryResolver.resolveComponentFactory(component);
componentRef = componentFactory.create(this.injector, [], dom);
onInit ? onInit(componentRef.instance) : console.log('no init');
this.appRef.attachView(componentRef.hostView);
} catch (e) {
console.error('Unable to load component', component, 'at', dom);
throw e;
}
return componentRef;
}
我当前的问题是渲染角度组件的生命周期。
我试过的东西:
尝试过的解决方案:什么都不做,一切都听天由命
问题:Angular从不调用CellContainer的Ngondestory。
尝试过的解决方案:将组件Ref保存在数组中,并在一定数量的渲染后尝试销毁我前一段时间渲染的组件。通过时间计数,渲染方法中的手动挂钩(垂直滚动/beforeRender/postRender)
问题:角度组件的销毁总是会引发错误(“无法读取null的属性‘nativeNode’”),或者组件显示完全错误
尝试的解决方案:在渲染期间:我检查是否已经有组件,以及是否仅通过添加新值来回收已经存在的组件。
问题:这些值在滚动过程中完全混淆。
github上提供了指向我的解决方案(以及已实施的解决方案#3)的链接。
有人知道如何以干净的方式处理这个问题吗?如果没有,应用程序就会变慢
可能您需要尝试更改检测,如下所示,强制对您的组件进行新更改。
changeDetection: ChangeDetectionStrategy.OnPush
使用单元渲染器。配置列时使用您选择的渲染器名称:
const container = document.getElementById('container');
const hot = new Handsontable(container,
{
data: someData,
columns:
[{
renderer: 'numeric'
}]
});
只是一个简单的问题。 让我们将这段代码作为IE: 是 NgIf 内的内容呈现然后从页面中隐藏,还是角度“知道”此 div 不会显示,因此甚至不渲染其中的内容?
问题内容: 如果我正在渲染而不是,则以下代码有效。 是否可以将玉器文件渲染为部分角度? 问题答案: 是的,有可能。看下面的链接 需要注意的两个重要点是: 代替和 在路由中添加以下内容:(代码用于node中的expressjs) 退出并重新启动节点/快速服务器。
问题内容: 我正在跟踪发现的一些代码,(是的,我知道它是如何工作的)它来自这里:代码链接 我想做的是如果单元格值设置为“黄色”,则设置单元格前景色 这是我的代码: 和单元格渲染器 问题是,如果我将任何单元格值设置为“黄色”,它就不会改变 提前致谢! 问题答案: 您的渲染器曾经使用过吗?您将其设置为包含String的单元格的默认渲染器,但是是否重载了模型的方法,以便它知道某些单元格包含String
我正在生成一个PdfPTable并将其添加到章节中,然后将章节添加到我的文档中。我的表格有几个单元格,其中行跨度 但是打印时,第2行和第3行之间有一个分页符,我希望表格如下所示: 这要归功于我在这里学到的一个技巧,我有一个实现IPdfPCellEvent的类,我实例化并附加到具有RowSpan的单元格 如果多次调用CellLayout(),则会发生后续调用,因为行跨度已溢出到新页面上(与我上面描述
我正在尝试将准备渲染器组件与自定义单元格渲染器一起使用。这个想法是使用准备渲染器绘制整行,并使用客户单元格渲染器绘制基于单元格值的自定义。 prepareRenderer 通过突出显示整行来按预期工作,但自定义单元格呈现器突出显示的单元格不会显示颜色,除非选定该属性。自定义单元格呈现似乎仅在单元格选择时起作用(突出显示包含 1 的单元格,但仅在选择时)。 关于如何使两者齐头并进,有什么想法吗? 下
我们当前的任务要求我们在openGL中使用较旧的固定管道方法。我们使用的是LWJGL 2.9.3。下面的代码显示一个三角形。问题是,它会疯狂地闪烁。显示器。swapBuffers()方法不会引发异常,并且无论是否包含它都没有任何区别。我根据这个问题创建了这个示例: gluPerspective、GluViewport、gluLookAt以及GL_投影和GL_MODELVIEW矩阵 编辑 还有一件事