2015-05-25 32 views
8

Sono nuovo di angularjs e sto cercando di creare un'applicazione a singola pagina. Ho un controller di casa con un codice molto semplice. Ha un pulsante "Ottieni dati" che chiama l'API e l'API restituisce i dati JSON.Salva json su file in angularjs ..?

Ora ho ricevuto la risposta e posso visualizzare la risposta sulla pagina html. I dati JSON è come questo

{ 
"Name":"A", 
"Age":"21" 
} 

Ora il mio problema è: Come posso salvare i dati JSON sopra per pc quando clicco il pulsante "Carica dati"?

+0

salvare i dati in cui sul PC? per quale scopo? nella cache? in un biscotto? nella memoria di sessione? in un database? devi essere più specifico su ciò che stai cercando di realizzare. – Claies

+0

in che formato vuoi salvare questi dati sul tuo sistema - csv o semplice file di testo –

risposta

22
$scope.saveToPc = function (data, filename) { 

    if (!data) { 
    console.error('No data'); 
    return; 
    } 

    if (!filename) { 
    filename = 'download.json'; 
    } 

    if (typeof data === 'object') { 
    data = JSON.stringify(data, undefined, 2); 
    } 

    var blob = new Blob([data], {type: 'text/json'}); 

    // FOR IE: 

    if (window.navigator && window.navigator.msSaveOrOpenBlob) { 
     window.navigator.msSaveOrOpenBlob(blob, filename); 
    } 
    else{ 
     var e = document.createEvent('MouseEvents'), 
      a = document.createElement('a'); 

     a.download = filename; 
     a.href = window.URL.createObjectURL(blob); 
     a.dataset.downloadurl = ['text/json', a.download, a.href].join(':'); 
     e.initEvent('click', true, false, window, 
      0, 0, 0, 0, 0, false, false, false, false, 0, null); 
     a.dispatchEvent(e); 
    } 
}; 

La soluzione è spudoratamente copiato da http://bgrins.github.io/devtools-snippets/#console-save

Modifica Grazie alla @ufk cambiato Metodo obsoleto initMouseEvent-initEvent. Non so perché non funziona in MSIE 11, probabilmente a causa di restrizioni di sicurezza. E Microsoft Edge ha un nuovo modo di impostare tutte le proprietà dell'evento sintetico, ma non l'ho testato.

+0

errr, cosa c'entra 'initMouseEvent' con il salvataggio di un file su disco? – Claies

+0

Fa clic sul collegamento creato per avviare il download. – hgoebl

+0

giusto, quindi non salvarlo davvero da nessuna parte, tanto quanto automatizzare un clic in modo che l'utente è invitato a salvare il file da qualche parte, capito. Potrebbe essere ciò che l'OP vuole, ma non erano esattamente chiari. – Claies