J'utilise un tapis-table pour lister le contenu des langues choisies par les utilisateurs. Ils peuvent également ajouter de nouvelles langues en utilisant le panneau de dialogue. Après avoir ajouté une langue et être revenu. Je veux que ma source de données soit rafraîchie pour montrer les changements qu'ils ont faits.
J'initialise le datastore en récupérant les données de l'utilisateur depuis un service et en les passant dans une source de données dans la méthode de rafraîchissement.
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);
});
}
}
langue-données-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
}
}
J'ai donc essayé d'appeler une méthode de rafraîchissement où je récupère à nouveau l'utilisateur depuis le backend, puis je réinitialise la source de données. Cependant, cela ne fonctionne pas, aucun changement ne se produit.
1 votes
Si vous souhaitez déclencher le changement "à partir de la source de données", veuillez consulter le site suivant stackoverflow.com/questions/47897694/
0 votes
Les émetteurs d'événements peuvent être utilisés dans ce cas. stackoverflow.com/a/44858648/8300620