gpt4 book ai didi

angular - 数据表显示使用 Angular 的表中没有可用数据

转载 作者:太空狗 更新时间:2023-10-29 17:33:37 24 4
gpt4 key购买 nike

当我试图在 Angular js 中显示数据表时。它显示表中没有可用数据,但表中有 4 条记录。请参见下面的屏幕截图。

enter image description here

这是我所做的。

user.component.ts

import { Component, OnInit } from '@angular/core';

import { UserModel } from './user-model';
import { UserService } from './user.service';
declare var $ :any;

@Component({
selector: 'user-page',
template: require('./user.component.html'),
providers: [ UserService ]
})

export class UserComponent implements OnInit {

data: any;
errorMessage: string;

constructor(private userService:UserService){ }

ngOnInit() {
this.getUsers();
}

getUsers() {
this.userService.getUsers()
.subscribe(
users => {this.data = users;
$(function(){
$("#user-table").DataTable();
});
},
error => this.errorMessage = <any>error);
}
}

user.service.ts

import { Injectable }              from '@angular/core';
import { Http, Response } from '@angular/http';
import { Headers, RequestOptions } from '@angular/http';

import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/map';

import { UserModel } from './user-model';

@Injectable()
export class UserService {
private usersUrl = 'http://localhost/larang/public/api/users';
constructor (private http: Http) {}

getUsers(): Observable<UserModel[]> {
return this.http.get(this.usersUrl)
.map(this.extractData)
.catch(this.handleError);
}


private extractData(res: Response) {
let body = res.json();

return body.data || { };
}

private handleError (error: Response | any) { console.log(error);

let errMsg: string;
if (error instanceof Response) {
const body = error.json() || '';
const err = body.error || JSON.stringify(body);
errMsg = `${error.status} - ${error.statusText || ''} ${err}`;
} else {
errMsg = error.message ? error.message : error.toString();
}
console.error(errMsg);
return Observable.throw(errMsg);
}
}

user.component.html

<table id="user-table" class="table table-bordered table-hover">
<thead>
<tr>
<th>Name</th>
<th>Email</th>
<th>Added On</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let item of data">
<td>{{item.name}}</td>
<td>{{item.email}}</td>
<td>{{item.added}}</td>
</tr>
</tbody>
</table>

this.data 看起来像这样

[
{"name":"John Doe","email":"john.doe@gmail.com","added":"2017-04-26"},
{"name":"Ramkishan","email":"Ramkishan@gmail.com","added":"2017-04-26"},
{"name":"Jason Bourne","email":"jason@gmail.com","added":"2017-04-26"},
{"name":"RK","email":"ramkishan.suthar@ranosys.com","added":"2017-04-26"}
]

我做错了什么请帮助。这对像我这样的 Angular JS 新手很有帮助。

最佳答案

在您的user.component.ts 中,将您的数据变量声明为空以对其进行初始化。我不知道为什么,但是当我刷新页面时我遇到了同样的问题。我认为数据丢失了,所以你需要初始化它。也许数据表需要知道有一个数组,并且在你填充它之后它就可以工作了。

    ngOnInit(){
this.data = [];
this.getUsers();
}

我错了

您必须重新呈现数据表,因为如果您重新呈现初始化会抛出错误,这就是为什么尽管表中有数据,您仍会收到消息说“无可用数据”。

更新

在您的组件中,声明此变量:

  @ViewChild(DataTableDirective)
dtElement: DataTableDirective;
dtOptions: DataTables.Settings = {};
dtTrigger: Subject<any> = new Subject();

从您拥有的任何服务中提取数据后:

this.officeSrv.getAll().subscribe((data) => {
console.log('----> office service : get all data', data);
this.offices = data.offices;

// ADD THIS
this.dtTrigger.next();

}, (err) => {
console.log('-----> err', err);
})

如果您有修改直接在同一个数据表中进行修改而不更改页面创建并调用此函数

rerender(): void {
this.dtElement.dtInstance.then((dtInstance: DataTables.Api) => {
// Destroy the table first
dtInstance.destroy();
// Call the dtTrigger to rerender again
this.dtTrigger.next();
});
}

在你的组件中使用这个库:

    import { DataTableDirective } from 'angular-datatables';

在您的应用模块中:

    import { DataTablesModule } from 'angular-datatables';

并声明:

    imports: [
...,
DataTablesModule

最后是您的模板 (HTML):

   <table datatable [dtOptions]="dtOptions" [dtTrigger]="dtTrigger" class="table table-hover table-striped table-bordered" cellspacing="0"
width="100%">
<thead>
<tr>
<th>Nom</th>
<th>Adresse</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let office of offices">
<td>{{office.name}}</td>
<td>{{office.adress}}</td>
<td>
<div class="btn-group">
<button type="button" class="btn btn-block btn-info">Action</button>
<button type="button" class="btn btn-primary btn-outline-info dropdown-toggle dropdown-toggle-split" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
<a class="dropdown-item" (click)="update(office._id)">Mettre à jour</a>
<a class="dropdown-item" (click)="delete(office._id)">Supprimer</a>
</div>
</div>
</td>
</tr>
</tbody>
</table>

希望对你有帮助

来源:https://l-lin.github.io/angular-datatables/#/advanced/rerender

关于angular - 数据表显示使用 Angular 的表中没有可用数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44940021/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com