2015-05-25 70 views
8

我是angularjs的新手,我試圖創建一個單頁面應用程序。我有一個非常簡單的代碼家庭控制器。它有一個按鈕「獲取數據」,它調用api並且api返回json數據。將json保存到angularjs文件中..?

現在我得到了答覆,我可以在html頁面上顯示響應。 JSON數據是這樣的

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

現在我的問題是: 如何我上面的JSON數據保存到PC,當我點擊按鈕「獲取數據」?

+0

保存在PC上的數據?出於什麼目的?在緩存中?在cookie中?在會話存儲?在數據庫中?你需要更具體地瞭解你正在努力完成的事情。 – Claies

+0

你想以什麼格式將這些數據保存在你的系統上 - csv或者簡單的文本文件 –

回答

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

溶液無恥地從http://bgrins.github.io/devtools-snippets/#console-save

編輯 由於複製到@ufk改變的方法已過時initMouseEventinitEvent。 不知道爲什麼它在MSIE 11中不起作用,可能是由於安全限制。而且Microsoft Edge有新的方法來設置綜合事件的所有屬性,但我沒有對它進行測試。

+0

errr,'initMouseEvent'與保存文件到磁盤有什麼關係? – Claies

+0

沒錯,所以不能真正將它保存在任何地方,就像自動點擊一樣,以便提示用戶將文件保存在某個地方。可能是OP想要的,但他們不完全清楚。 – Claies