【发布时间】:2020-07-18 15:32:30
【问题描述】:
我有一个从后端发送数据的 api,所以当我尝试以我的角度获取这些数据时,数据不会在第一次加载,并且我的表保持为空,但是如果例如打印来自的数据在我的数据源中设置它之前,我的表已正确填充。
我的代码是:
user-datasource.ts
export class UserListDataSource extends DataSource<User> {
data: User[];
paginator: MatPaginator;
sort: MatSort;
constructor(private usersService: UsersService) {
super();
}
connect(): Observable<User[]> {
this.data = this.usersService.usersList();
//this.data.forEach(u => console.log(u.id)); <<---------- When I log this, My data is fill corectly
const dataMutations = [
observableOf(this.data),
this.paginator.page,
this.sort.sortChange
];
return merge(...dataMutations).pipe(map(() => {
return this.getPagedData(this.getSortedData([...this.data]));
}));
}
...
}
用户服务
export class UsersService {
users: User[];
constructor(private http: HttpClient) {}
usersList() {
this.http.get(`${environment.apiUrl}/users`).pipe(
map((jsonArray: Object[]) => jsonArray.map(jsonItem => User.fromJson(jsonItem)))
).subscribe((users: User[]) => { this.users = users; });
return this.users;
}
}
组件
export class UserListComponent implements AfterViewInit, OnInit {
@ViewChild(MatPaginator) paginator: MatPaginator;
@ViewChild(MatSort) sort: MatSort;
@ViewChild(MatTable) table: MatTable<User>;
dataSource: UserListDataSource = new UserListDataSource(this.usersService);
displayedColumns = ['id', 'email', 'username'];
constructor(private usersService: UsersService) { }
ngOnInit() {}
ngAfterViewInit() {
this.dataSource.sort = this.sort;
this.dataSource.paginator = this.paginator;
this.table.dataSource = this.dataSource;
}
}
我不确定我是否使用了正确的方式来填满我的桌子,或者我错过了什么。
据我所见,我认为后端加载数据的时间比前端要长,换句话说,前端没有等待从后端获取数据的必要时间。
请问有什么办法可以解决吗?
注意:我使用角度材料原理图来创建所有这些,在默认代码中,它使用静态数据,这不是我的解决方案,我需要使用动态数据。
【问题讨论】: