J'ai un historique BehaviourSubject $ de type EvaluateHistoryItem []. Dans la méthode uploadFile, je divise un fichier .txt téléchargé par des virgules, puis je les envoie à resultSet []. Je veux ajouter les valeurs de resultSet [] à l'historique $ BehaviorSubject.Ajouter des valeurs de array à BehaviorSubject
Je suis nouveau à RxJS, et je trouve ça compliqué (je travaille encore dessus). J'apprécierais de l'aide.
J'ai essayé quelque chose comme ça, mais il est inexact que je ne veux pas la carte, mais d'ajouter de nouvelles valeurs (je pense que ce devrait être quelque chose avec combineLatest):
history.map(a => {
a.saved = this.convertToBool(resultSet[0]);
a.evaluate = resultSet[1];
a.result = resultSet[2];
a.runTimeMs = Number(resultSet[3]);
a.tags.map(tag => tag.value = resultSet[4]);
});
this.history$.next(history);
ps. Désolé si le titre de la question n'est pas bon.
Voici mon code:
interface EvaluateHistoryItem {
evaluate: string;
error?: string;
result?: string;
runTimeMs?: number;
saved?: boolean;
}
export class EvaluateComponent implements OnInit, AfterViewInit {
... ... ...
... ... ...
public history$ = new BehaviorSubject<EvaluateHistoryItem[]>([]);
... ... ...
public uploadFile(element: any) {
let uploadedFile = document.getElementById('uploadedFile');
let files: File[] = element.srcElement.files;
let file: File = files[0];
let reader = new FileReader();
let resultSet: string[] = [];
reader.onloadend = (result) => {
// replace new lines with commas and then split upon commas but not the ones inside quotes
let columns: string[] = reader.result.replace(/\n/g, ',').split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);
for (let i = 0; i < columns.length - 1; i++) {
resultSet.push(columns[i]);
}
};
let history: EvaluateHistoryItem[] = this.history$.getValue();
// ... here I need to map values from resultSet
// ....
this.history$.next(history);
}
resultSet.splice (0, 4) supprimera les quatre premiers éléments. – Devid