2014-05-22 18 views
5

Używam AngularJS do utworzenia nowego znacznika w celu pobrania pliku csv. Poniżej kodu używam, aby uruchomić pobieranie. Pobieranie rozpocznie się w przeglądarce Chrome, ale nie w Firefoksie. Czy masz pojęcie, dlaczego tak się dzieje?Wywołać kliknięcie elementu dynamicznie tworzonego przez AngularJS

var element = angular.element('<a/>'); 
element.attr({ 
    href: exportedString, 
    target: '_self', 
    download: 'test.csv' 
})[0].click(); 

EDIT: Firefox potrzebuje istniejący DOM

JS:

var linkElem = $("#link"); 
var element = angular.element(linkElem); 

HTML:

<a ng-hide=true id="link"></a> 

EDIT 2: W Chrome nazwę pobranego pliku to "pobierz" i nie t przekazywana wartość ("test.csv" w tym przypadku). Jakieś sugestie?

Tutaj znajduje się również plunker

+0

Zastanawiam się, czy to może być błąd w najnowszym Chrome ... – gkalpak

Odpowiedz

5

Jest to błąd w Chrome 35 podano w issue #377860.

Obserwuj this odpowiedź więcej szczegółów

zaktualizowałem swoje rozwiązanie plunker.

Zasadniczo trzeba używać go jak następujące:

var element = document.createElement('a'); 
var blob = new Blob([$scope.exportContent], { 
    type: 'text/csv' 
}); 
var url = URL.createObjectURL(blob); 
element.href = url; 
element.setAttribute('download', 'test.csv'); 
document.body.appendChild(element); //Append the element to work in firefox 
element.click(); 
+0

działa jak urok, thnx – deen

0

Aby uzyskać zarówno Chrome & FF do pracy, tak naprawdę okazało się, że miałem do pierwszego sprawdzić, czy elementem [0] była niezdefiniowana (który go był w Chrome, ale nie w FF):

var link = $("#reportDownloadLink"); 
var element = angular.element(link) 
    .attr('href', dataUrl) 
    .attr('download', data.FileDownloadName) 
    .attr('target', '_blank'); 
(element[0] || element).click(); 
Powiązane problemy