2017-09-02 5 views
1

Ich versuche, eine JSON-Datei von der lokalen Festplatte zu laden und die Daten zu verwenden, um eine FabricJS-Zeichenfläche zu füllen. Ich habe Probleme beim Abrufen der Daten aus der Datei.Wie lese ich eine JSON-Datei in Angular?

Das habe ich bis jetzt.

app.html

<input type="file" accept=".json" id="fileInput" (change)="loadFile($event)"/> 

app.ts

loadFile(event) { 
const eventObj: MSInputMethodContext = <MSInputMethodContext> event; 
const target: HTMLInputElement = <HTMLInputElement> eventObj.target; 
const files: FileList = target.files; 
this.file = files[0]; 

const reader = new FileReader(); 
reader.readAsText(this.file, 'utf8'); 

this.canvas.loadFromJSON(this.file, this.canvas.renderAll.bind(this.canvas), function (o, object) { 
    console.log(o, object); 
}); 

Irgendwelche Gedanken darüber, wie ich diese Arbeit machen kann?

+0

warum verwenden Sie einfach keinen Dienst, der mit einem $ http die JSON-Datei lädt. –

+0

Mögliches Duplikat der Datei [AngularJS: factory $ http.get JSON] (https://stackoverflow.com/questions/16930473/angularjs-factory-http-get-json-file) – user93

Antwort

0

FileReader hat eine asynchrone API.

Sie müssen einen Rückruf für das Onload-Ereignis registrieren, um die Daten abzurufen.

loadFile(event) { 
const eventObj: MSInputMethodContext = <MSInputMethodContext> event; 
const target: HTMLInputElement = <HTMLInputElement> eventObj.target; 
const files: FileList = target.files; 
this.file = files[0]; 

const reader = new FileReader(); 
reader.readAsText(this.file, 'utf8'); 
reader.onload = function() { 
    this.canvas.loadFromJSON(reader.result, this.canvas.renderAll.bind(this.canvas), function (o, object) { 
    console.log(o, object); 
}); 
} 
Verwandte Themen