Używam tabeli mat w celu wyświetlenia zawartości wybranych języków. Mogą również dodawać nowe języki za pomocą panelu dialogowego. Po dodaniu języka i zwróceniu go chcę odświeżyć źródło danych, aby pokazać zmiany, które wprowadzili.Angular + Material - odświeżanie źródła danych (mat-table)
Inicjuję magazyn danych, pobierając dane użytkownika z usługi i przekazując je do źródła danych w metodzie odświeżania.
Language.component.ts
import { Component, OnInit } from '@angular/core';
import { LanguageModel, LANGUAGE_DATA } from '../../../../models/language.model';
import { LanguageAddComponent } from './language-add/language-add.component';
import { AuthService } from '../../../../services/auth.service';
import { LanguageDataSource } from './language-data-source';
import { LevelbarComponent } from '../../../../directives/levelbar/levelbar.component';
import { DataSource } from '@angular/cdk/collections';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/of';
import { MatSnackBar, MatDialog } from '@angular/material';
@Component({
selector: 'app-language',
templateUrl: './language.component.html',
styleUrls: ['./language.component.scss']
})
export class LanguageComponent implements OnInit {
displayedColumns = ['name', 'native', 'code', 'level'];
teachDS: any;
user: any;
constructor(private authService: AuthService, private dialog: MatDialog) { }
ngOnInit() {
this.refresh();
}
add() {
this.dialog.open(LanguageAddComponent, {
data: { user: this.user },
}).afterClosed().subscribe(result => {
this.refresh();
});
}
refresh() {
this.authService.getAuthenticatedUser().subscribe((res) => {
this.user = res;
this.teachDS = new LanguageDataSource(this.user.profile.languages.teach);
});
}
}
język-data-source.ts
import {MatPaginator, MatSort} from '@angular/material';
import {DataSource} from '@angular/cdk/collections';
import {Observable} from 'rxjs/Observable';
import 'rxjs/add/observable/merge';
import 'rxjs/add/operator/map';
export class LanguageDataSource extends DataSource<any> {
constructor(private languages) {
super();
}
connect(): Observable<any> {
return Observable.of(this.languages);
}
disconnect() {
// No-op
}
}
Więc starałem się wywołać metodę odświeżania gdzie mogę uzyskać od użytkownika backend, a następnie ponownie zainicjuję źródło danych. Jednak to nie działa, nie ma żadnych zmian.
To wydaje się działać, czy to właściwy sposób? Wydaje się nieco hacky ... – KHAN
Jakie są inne sposoby? Czy możesz podać przykłady w rozwiązaniu, aby uzyskać pełną odpowiedź? – KHAN
Używam tylko tego w moich projektach właśnie teraz. – HDJEMAI