2017-02-21 30 views
5

Я использую угловой 2. Я хочу предоставить функциональность для загрузки файла JSON.Angular2 to export/download json file

Как у меня есть ответ с res = {bar: foo}, тогда я хочу создать json-файл, который будет содержать этот ответ, который можно скачать на кнопку/якорный щелчок.

Любая помощь будет принята с благодарностью.

ответ

8

Это было просто, то я ожидал

constructor(private sanitizer: DomSanitizer){} 

    generateDownloadJsonUri() { 
     var theJSON = JSON.stringify(this.resJsonResponse); 
     var uri = this.sanitizer.bypassSecurityTrustUrl("data:text/json;charset=UTF-8," + encodeURIComponent(theJSON)); 
     this.downloadJsonHref = uri; 
    } 

в шаблоне

<a class="btn btn-clear" title="Download JSON" [href]="downloadJsonHref" download="download.json"></a> 
+0

Как и когда создается generateDownloadJsonUri() под названием –

+1

Я использовал конструктор, потому что у меня был 'this.resJsonResponse' готов. вы должны называть его после того, как Json Response готов. –

0

Вы можете использовать DomSanitizer: необходима https://angular.io/docs/ts/latest/api/platform-browser/index/DomSanitizer-class.html

оператор импорта:

import {enter code here DomSanitizer, SafeResourceUrl, SafeUrl} from '@angular/platform-browser'; 
constructor(private sanitizer: DomSanitizer){} 

generateDownloadJsonUri() { 
    var theJSON = JSON.stringify(this.resJsonResponse); 
    var uri = this.sanitizer.bypassSecurityTrustUrl("data:text/json;charset=UTF-8," + encodeURIComponent(theJSON)); 
    this.downloadJsonHref = uri; 
} 
+0

Измените свой ответ, чтобы включить какое-то объяснение. Кодовые ответы очень мало для обучения будущих читателей SO. Ваш ответ находится в очереди модерации за то, что он некачественный. – mickmackusa

1

У меня были проблемы, когда мой json был таким большим, я добавил объект Blob в ответ Ankur Akvaliya, и он работает !!

generateDownloadJsonUri() { 
    let theJSON = JSON.stringify(this.resJsonResponse); 
    let blob = new Blob([theJSON], { type: 'text/json' }); 
    let url= window.URL.createObjectURL(blob); 
    let uri:SafeUrl = this.sanitizer.bypassSecurityTrustUrl(url); 
    this.downloadJsonHref = uri; 
}