2017-05-08 21 views
2

私はクライアント(Angular)とサーバー(PHP)の両方を開発しています。AngularrJSがHREFリンクを完全に無効にする

サーバPHPがMySqlサーバから取得したデータから生成するCSVファイルをユーザがダウンロードできるようにしたいとします。

私は、ブラウザに保存場所のファイル選択ダイアログを開くための最も簡単な方法だと思われるので、<a HREF...リンクを使用しています(これはボタンのように見えます)。

ただし、Excelにはファイルタイプが.CSVに設定されていますが、多くのユーザーにもこの設定が適用されます。

Excelの読み込みには数秒かかりますが、何も起こっていないように見えるので、ユーザーは何度も繰り返しクリックしています(自分でもやっています)、新しいファイルを取得します毎回。

私がしたいのは、リンクをクリックした後に無効にしてから、ファイルをダウンロードしたときに再度有効にすることです。しかし、ダウンロードを検出する方法がわかりません(HREFで、$HTTP 、私は.then()で再び有効にできます)。

アドバイスはありますか?私はちょうどユーザーがそれを閉じることができる前にファイルが到着することを望んで、 "これは数秒かかる"モーダルを投げることを検討しています。

+1

ダウンロードはウィンドウの外にあります。 – charlietfl

答えて

1

過去にこのパターンをうまく使いました。ダウンロードが完了したら、$ httpを使用して、hrefが新しくダウンロードされたファイルを指し示すアンカータグを作成し、コントロールをブラウザに保存/開封するためのアンカー:

$http.get('yourUrlPath').then(function(object) { 
var anchor; 
    anchor = angular.element('<a/>'); 
    return anchor.attr({ 
    href: 'data:attachment/csv;charset=utf-8,' + encodeURI(object.data), 
    target: '_blank', 
    download: "somefilename.csv" 
    })[0].click(); 
}, function(httpError) { 
    throw httpError.status + " : " + httpError.data; 
}); 
+0

Sneaky!しかし、それはうまく見えます:-)私はそれを試し、あなたに戻ってきます – Mawg

+0

DOMに挿入したアンカータグをクリックして偽造したら、それを削除してはいけませんか? – Mawg

+1

私はそうは思わない。私はちょうど要素であるローカルJS変数を作成しているので、関数が戻るときにガベージコレクションされるはずです。要素は実際にはメモリに格納されていないdomに挿入されることはないことに注意してください。 –

関連する問題