Tenho algum texto em uma área de texto oculta. Quando um botão é clicado, gostaria de ter o texto oferecido para download como um .txt
arquivo. Isso é possível usando AngularJS ou Javascript?
javascript
angularjs
apelido
fonte
fonte
Respostas:
Você pode fazer algo assim usando
Blob
.em seu controlador:
para habilitar o URL:
Observe que
Fonte: MDN
fonte
$scope.url
não funcionou para mim. Eu tive que usar em seuwindow.location
lugar.download
atributo não é compatível com nenhuma versão do IE ou Safari, embora caniuse.com/#feat=downloadBasta clicar no botão para fazer o download usando o seguinte código.
em html
No controlador
fonte
$http.get(...)
certifique-se de definirresponseType:'arraybuffer'
como explicado aqui: stackoverflow.com/questions/21628378/…Tente isto
e visite este site, pode ser útil para você :)
http://docs.angularjs.org/guide/
fonte
download
atributo que ainda não é compatível com nenhuma versão do IE ou Safari. Confira aqui: caniuse.com/#feat=downloadIsso pode ser feito em javascript sem a necessidade de abrir outra janela do navegador.
Substitua 'url' pelo link para o seu arquivo. Você pode colocá-lo em uma função e chamá-lo com
ng-click
se precisar acionar o download de um botão.fonte
Em nosso projeto atual no trabalho, tínhamos um iframe invisível e eu tive que alimentar o url do arquivo para o iframe para obter uma caixa de diálogo de download. No clique do botão, o controlador gera a url dinâmica e dispara um evento $ scope onde um custom
directive
que escrevi está listando. A diretiva anexará um iframe ao corpo se ele ainda não existir e definirá o atributo url nele.EDIT: Adicionando uma diretiva
Esta diretiva responde a um evento de controlador chamado
downloadFile
então no seu controlador você faz
fonte
Você pode definir
location.href
um URI de dados contendo os dados que deseja permitir que o usuário faça download. Além disso, acho que não há como fazer isso apenas com JavaScript.fonte
$location.href
alterado para$window.location.href
Gostaria apenas de acrescentar que caso ele não baixe o arquivo por causa de inseguro: blob: null ... quando você passa o mouse sobre o botão de download, é necessário limpá-lo. Por exemplo,
fonte
Se você tiver acesso a no servidor, considere definir os cabeçalhos conforme respondido nesta pergunta mais geral .
Lendo os comentários sobre essa resposta, é aconselhável usar um Content-Type mais específico do que o octet-stream.
fonte
Tive o mesmo problema e passei muitas horas procurando diferentes soluções, e agora junto todos os comentários deste post. Espero que seja útil, minha resposta foi testada corretamente no Internet Explorer 11, Chrome e FireFox.
HTML:
DIRETIVA:
NO CONTROLADOR:
EM SERVIÇO:
BACKEND (em PRIMAVERA):
fonte
Isso funcionou para mim no angular:
fonte
data:text/plain;base64,${btoa(theStringGoesHere)}
Eu não queria um URL estático. Eu tenho AjaxFactory para fazer todas as operações de Ajax. Estou obtendo o url da fábrica e vinculando-o da seguinte maneira.
Obrigado @AhlemMustapha
fonte