2015-05-25 15 views
8

Jestem nowy w angularjs i staram się stworzyć pojedynczą aplikację strony. Mam kontroler domowy z bardzo prostym kodem. Posiada jeden przycisk "Get Data", który wywołuje api, a api zwraca dane json.Zapisać plik json do pliku w angularjs ..?

Teraz otrzymałem odpowiedź i mogę wyświetlić odpowiedź na stronie html. Dane JSON jest tak

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

Teraz mój problem jest: Jak mogę zapisać powyższe dane JSON do komputera, po kliknięciu na przycisk „Pobierz dane”?

+0

zapisać dane na komputerze? w jakim celu? w pamięci podręcznej? w ciasteczku? w pamięci sesji? w bazie danych? musisz być bardziej szczegółowy o tym, co próbujesz osiągnąć. – Claies

+0

w jakim formacie chcesz zapisać te dane w systemie - csv lub prosty plik tekstowy –

Odpowiedz

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); 
    } 
}; 

Rozwiązaniem jest bezczelnie skopiowane z http://bgrins.github.io/devtools-snippets/#console-save

Edycja Dzięki @ufk zmienił metodę przestarzałej initMouseEvent do initEvent. Nie wiem, dlaczego nie działa w MSIE 11, prawdopodobnie ze względu na ograniczenia bezpieczeństwa. Microsoft Edge ma nowy sposób ustawiania wszystkich właściwości zdarzenia syntetycznego, ale go nie przetestowałem.

+0

errr, co robi initMouseEvent z zapisaniem pliku na dysk? – Claies

+0

Kliknięcie utworzonego linku powoduje rozpoczęcie pobierania. – hgoebl

+0

w prawo, więc tak naprawdę nie zapisuje go nigdzie, tak samo jak automatyzacja kliknięcia, więc użytkownik jest monitowany o zapisanie pliku gdzieś, dostał go. Może być tym, co chce OP, ale nie były one dokładnie jasne. – Claies