Angular - ngx-datatable 单元格模板未填充数据
Angular - ngx-datatable celltemplate not populating data
在我的 Angular-12 中,我正在使用 @tusharghoshbd ngx-datatable 单元模板。
我有如下所示的组件:
组件:
ngOnInit(): void {
this.isLoading = true;
this.siteInfoService.getAllSiteInfo1()
.subscribe(
data => {
this.allSiteInfoList = data.results.info;
console.log(data);
},
error => {
this.store.dispatch(loadErrorMessagesSuccess(error));
this.isLoading = false;
}
);
this.options = {
loader: true
}
this.columns = [{
key: 'id',
title: '<div class="blue"><i class="fa fa-id-card-o"></i> ID</div>',
width: 60,
sorting: true,
align: {
head: 'center',
body: 'center'
},
vAlign: {
head: 'bottom',
body: 'middle'
},
},
{
key: 'name',
title: '<div class="blue"><i class="fa fa-user"></i> Name</div>',
width: 100
},
{
key: 'email',
title: '<div class="blue"><i class="fa fa-phone"></i> Email</div>',
align: {
head: 'left'
},
width: 100,
sorting: true
},
{
key: 'address',
title: '<div class="blue"><i class="fa fa-building"></i> Address</div>',
width: 300,
sorting: false,
align: {
head: 'left',
body: 'right'
},
noWrap: {
head: true,
body: true
},
cellTemplate: this.addressTpl
},
{
key: 'website',
title: '<div class="blue"><i class="fa fa-calendar-times-o"></i> Website</div>',
width: 60,
sorting: true,
align: {
head: 'center',
body: 'center'
}
},
{
key: 'zip',
title: '<div class="blue">Action</div>',
align: {
head: 'center',
body: 'center'
},
sorting: false,
width: 80,
cellTemplate: this.actionTpl
}
]
}
HTML:
<ngx-datatable tableClass="table table-striped table-bordered table-hover" [data]="data" columns]="columns">
<ngx-caption>
<div class="row">
<div class="col-sm-6 col-xs-6 col-6 ">
<b>
<i class="fa fa-table" aria-hidden="true"></i>
Site Info. List
</b>
</div>
<div class="col-sm-6 col-xs-6 col-6 text-right">
<button type="button" class="btn btn-primary">
<i class="fa fa-plus" aria-hidden="true"></i> Add New Data
</button>
</div>
</div>
</ngx-caption>
<ng-template #addressTpl let-row let-rowIndex="rowIndex" let-columnValue="columnValue">
{{columnValue.name}}, {{columnValue.email}}
</ng-template>
<ng-template #actionTpl let-row let-rowIndex="rowIndex" let-columnValue="columnValue">
<a href="javascript:void(0)" (click)="edit(row)">Edit</a> |
<a href="javascript:void(0)" (click)="remove(rowIndex)">Delete</a>
</ng-template>
</ngx-datatable>
我希望它填充来自 restful api 的 JSON 响应的数据,但除了 header 列标题外没有显示任何数据。
但是当我为以下内容执行控制台日志时:
console.log(数据)在
data=>{
this.allSiteInfoList = data.results.info;
console.log(data);
},
我有这个:
{
"message": "Site Infos. Successfully Retrieved.",
"error": false,
"code": 200,
"results": {
"infos": [
{
"id": 1,
"name": "Lamptey",
"email": "example@email.com",
"address": ddsdsdsd,
"website": www.marlamp.com,
"phone1": 2549099887766,
"phone2": null,
"phone3": null,
"site_name": null,
"site_logo": null,
"site_favicon": null,
"created_by": 0,
"updated_by": 0,
"created_at": null,
"updated_at": null
}
]
}
}
我该如何解决这个问题?
谢谢
有一些 issues/typo 错误需要指出。
问题 1:缺少 columns]="columns"
的左方括号
site-info.component.html
<ngx-datatable tableClass="table table-striped table-bordered table-hover" [data]="data" columns]="columns">
修复问题 1:
site-info.component.html
<ngx-datatable tableClass="table table-striped table-bordered table-hover" [data]="data" [columns]="columns">
问题 2:使用 [data]="allSiteInfoList"
而不是 [data]="data"
site-info.component.html
[data]="data"
site-info.component.ts
this.allSiteInfoList = data.results.info;
当您将值分配给 allSiteInfoList
时,您应该将数据源引用为 allSiteInfoList
。
问题 2 的修复:
site-info.component.html
[data]="allSiteInfoList"
问题 3:使用 data.results.info
而不是 data.results.info
在您的 JSON 结果中,它显示 infos
而不是 info
。发现您访问了错误的 属性 名称。
建议将响应结果的接口定义为蓝图。
{
...
"results": {
"infos": [
..
]
}
}
site-info.component.ts
this.allSiteInfoList = data.results.info;
问题 3 的修复:
site-info.component.ts
this.allSiteInfoList = data.results.infos;
问题 4:分页无法正常工作(作为对 Post 所有者评论的回复)
ngx-datatable
的分页无法正常工作,出现以下错误:
- 显示 NaN 到 NaN 的 1 个条目
- 显示页码 1、2、3、4、5
因为您错过了 [options]
的输入 属性 绑定。
您必须添加 [options]="options"
才能使用分页。
问题 4 的修复:
<ngx-datatable tableClass="table table-striped table-bordered table-hover"
[data]="allSiteInfoList"
[columns]="columns"
[options]="options">
在我的 Angular-12 中,我正在使用 @tusharghoshbd ngx-datatable 单元模板。
我有如下所示的组件:
组件:
ngOnInit(): void {
this.isLoading = true;
this.siteInfoService.getAllSiteInfo1()
.subscribe(
data => {
this.allSiteInfoList = data.results.info;
console.log(data);
},
error => {
this.store.dispatch(loadErrorMessagesSuccess(error));
this.isLoading = false;
}
);
this.options = {
loader: true
}
this.columns = [{
key: 'id',
title: '<div class="blue"><i class="fa fa-id-card-o"></i> ID</div>',
width: 60,
sorting: true,
align: {
head: 'center',
body: 'center'
},
vAlign: {
head: 'bottom',
body: 'middle'
},
},
{
key: 'name',
title: '<div class="blue"><i class="fa fa-user"></i> Name</div>',
width: 100
},
{
key: 'email',
title: '<div class="blue"><i class="fa fa-phone"></i> Email</div>',
align: {
head: 'left'
},
width: 100,
sorting: true
},
{
key: 'address',
title: '<div class="blue"><i class="fa fa-building"></i> Address</div>',
width: 300,
sorting: false,
align: {
head: 'left',
body: 'right'
},
noWrap: {
head: true,
body: true
},
cellTemplate: this.addressTpl
},
{
key: 'website',
title: '<div class="blue"><i class="fa fa-calendar-times-o"></i> Website</div>',
width: 60,
sorting: true,
align: {
head: 'center',
body: 'center'
}
},
{
key: 'zip',
title: '<div class="blue">Action</div>',
align: {
head: 'center',
body: 'center'
},
sorting: false,
width: 80,
cellTemplate: this.actionTpl
}
]
}
HTML:
<ngx-datatable tableClass="table table-striped table-bordered table-hover" [data]="data" columns]="columns">
<ngx-caption>
<div class="row">
<div class="col-sm-6 col-xs-6 col-6 ">
<b>
<i class="fa fa-table" aria-hidden="true"></i>
Site Info. List
</b>
</div>
<div class="col-sm-6 col-xs-6 col-6 text-right">
<button type="button" class="btn btn-primary">
<i class="fa fa-plus" aria-hidden="true"></i> Add New Data
</button>
</div>
</div>
</ngx-caption>
<ng-template #addressTpl let-row let-rowIndex="rowIndex" let-columnValue="columnValue">
{{columnValue.name}}, {{columnValue.email}}
</ng-template>
<ng-template #actionTpl let-row let-rowIndex="rowIndex" let-columnValue="columnValue">
<a href="javascript:void(0)" (click)="edit(row)">Edit</a> |
<a href="javascript:void(0)" (click)="remove(rowIndex)">Delete</a>
</ng-template>
</ngx-datatable>
我希望它填充来自 restful api 的 JSON 响应的数据,但除了 header 列标题外没有显示任何数据。
但是当我为以下内容执行控制台日志时:
console.log(数据)在
data=>{
this.allSiteInfoList = data.results.info;
console.log(data);
},
我有这个:
{
"message": "Site Infos. Successfully Retrieved.",
"error": false,
"code": 200,
"results": {
"infos": [
{
"id": 1,
"name": "Lamptey",
"email": "example@email.com",
"address": ddsdsdsd,
"website": www.marlamp.com,
"phone1": 2549099887766,
"phone2": null,
"phone3": null,
"site_name": null,
"site_logo": null,
"site_favicon": null,
"created_by": 0,
"updated_by": 0,
"created_at": null,
"updated_at": null
}
]
}
}
我该如何解决这个问题?
谢谢
有一些 issues/typo 错误需要指出。
问题 1:缺少 columns]="columns"
的左方括号
site-info.component.html
<ngx-datatable tableClass="table table-striped table-bordered table-hover" [data]="data" columns]="columns">
修复问题 1:
site-info.component.html
<ngx-datatable tableClass="table table-striped table-bordered table-hover" [data]="data" [columns]="columns">
问题 2:使用 [data]="allSiteInfoList"
而不是 [data]="data"
site-info.component.html
[data]="data"
site-info.component.ts
this.allSiteInfoList = data.results.info;
当您将值分配给 allSiteInfoList
时,您应该将数据源引用为 allSiteInfoList
。
问题 2 的修复:
site-info.component.html
[data]="allSiteInfoList"
问题 3:使用 data.results.info
而不是 data.results.info
在您的 JSON 结果中,它显示 infos
而不是 info
。发现您访问了错误的 属性 名称。
建议将响应结果的接口定义为蓝图。
{
...
"results": {
"infos": [
..
]
}
}
site-info.component.ts
this.allSiteInfoList = data.results.info;
问题 3 的修复:
site-info.component.ts
this.allSiteInfoList = data.results.infos;
问题 4:分页无法正常工作(作为对 Post 所有者评论的回复)
ngx-datatable
的分页无法正常工作,出现以下错误:
- 显示 NaN 到 NaN 的 1 个条目
- 显示页码 1、2、3、4、5
因为您错过了 [options]
的输入 属性 绑定。
您必须添加 [options]="options"
才能使用分页。
问题 4 的修复:
<ngx-datatable tableClass="table table-striped table-bordered table-hover"
[data]="allSiteInfoList"
[columns]="columns"
[options]="options">