У меня есть API, который отправляет данные из бэкэнда, поэтому, когда я пытаюсь получить эти данные в моем angular, данные не загружаются в первый раз, и моя таблица остается пустой, но если, например, распечатать данные, которые исходить из banckend перед настройкой в моем источнике данных, моя таблица заполнена правильно.
Мой код:
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]));
}));
}
...
}
userService
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;
}
}
Я не уверен, если Я использую правильный способ заполнить свою таблицу, или я что-то пропускаю.
Из того, что я вижу, я думаю, что бэкэнд занял больше времени, чем веб-интерфейс для загрузки данных, другими словами, веб-интерфейс не ждет необходимое время для получения данных из бэкэнда.
Есть ли способ исправить это, пожалуйста?
Примечание: Я использую angular схемы материалов для создания всех это, в коде по умолчанию, он использует данные stati c, что не является для меня решением, и мне нужно использовать данные Dynami c.