Mam tekst w ukrytym obszarze tekstu. Po kliknięciu przycisku chciałbym, aby tekst był oferowany do pobrania jako .txt
plik. Czy jest to możliwe przy użyciu AngularJS lub Javascript?
javascript
angularjs
nickponline
źródło
źródło
Odpowiedzi:
Możesz zrobić coś takiego za pomocą
Blob
.w kontrolerze:
aby włączyć adres URL:
Proszę to zanotować
Źródło: MDN
źródło
$scope.url
nie zadziałało. Musiałemwindow.location
zamiast tego użyć .download
atrybut nie jest jednak obsługiwany w żadnej wersji IE ani Safari caniuse.com/#feat=downloadWystarczy kliknąć przycisk, aby pobrać za pomocą następującego kodu.
w html
W kontrolerze
źródło
$http.get(...)
, ustawresponseType:'arraybuffer'
tak, jak wyjaśniono tutaj: stackoverflow.com/questions/21628378/ ...Spróbuj tego
i odwiedź tę stronę, może być dla Ciebie pomocna :)
http://docs.angularjs.org/guide/
źródło
download
atrybut, który nadal nie jest obsługiwany przez żadną wersję IE ani Safari. Sprawdź to tutaj: caniuse.com/#feat=downloadMożna to zrobić w javascript bez konieczności otwierania innego okna przeglądarki.
Zastąp „url” linkiem do pliku. Możesz umieścić to w funkcji i wywołać ją,
ng-click
jeśli chcesz uruchomić pobieranie z przycisku.źródło
W naszym obecnym projekcie w pracy mieliśmy niewidoczny element iFrame i musiałem podać adres URL pliku do elementu iFrame, aby uzyskać okno dialogowe pobierania. Po kliknięciu przycisku kontroler generuje dynamiczny adres URL i wyzwala zdarzenie $ scope, w którym plik niestandardowy
directive
znajduje się lista którą napisałem. Dyrektywa doda element iFrame do treści, jeśli jeszcze nie istnieje, i ustawi dla niego atrybut url.EDYCJA: Dodanie dyrektywy
Ta dyrektywa odpowiada na zdarzenie kontrolera o nazwie
downloadFile
więc w kontrolerze robisz
źródło
Można ustawić
location.href
do danych URI zawierający dane, które chcesz pozwolić pobieranie użytkownika. Poza tym nie sądzę, aby można było to zrobić za pomocą samego JavaScript.źródło
$location.href
zmieniono na$window.location.href
Chciałbym tylko dodać, że w przypadku, gdy nie pobierze pliku z powodu niebezpiecznego: blob: null ... kiedy najedziesz kursorem na przycisk pobierania, musisz go wyczyścić. Na przykład,
źródło
Jeśli masz dostęp do na serwerze, rozważ ustawienie nagłówków zgodnie z odpowiedzią na to bardziej ogólne pytanie .
Czytając komentarze do tej odpowiedzi, zaleca się użycie bardziej szczegółowego typu treści niż strumień oktetu.
źródło
Miałem ten sam problem i spędziłem wiele godzin na szukaniu różnych rozwiązań, a teraz dołączam do wszystkich komentarzy w tym poście. Mam nadzieję, że będzie pomocna, moja odpowiedź została poprawnie przetestowana na Internet Explorerze 11, Chrome i FireFoxie.
HTML:
DYREKTYWA:
W KONTROLERZE:
CZYNNY:
BACKEND (na WIOSNĘ):
źródło
To zadziałało dla mnie w kątowym:
źródło
data:text/plain;base64,${btoa(theStringGoesHere)}
Nie chciałem statycznego adresu URL. Mam AjaxFactory do wykonywania wszystkich operacji Ajax. Pobieram adres URL z fabryki i wiążę go w następujący sposób.
Dzięki @AhlemMustapha
źródło