AngularJS1.5でファイルをアップロードする機能を追加したかったのだが、ファイルをアップロードしてもページ遷移はしたくなかったので、$httpを使ってAJAX的にプログラム内から送って、結果を受け取るようにした。
例として定義するモジュール
定義するモジュール名を仮にappとする:
// app.js |
選択したファイルをAngularJSに渡せるようにするためのディレクティブを定義する
HTMLのinput type="file"で選択したファイルをAngularJSに受け渡すためのディレクティブを定義する:
// app.js |
elementのchangeを監視して、変更されたらモデルを更新する
ファイルを選択してアップロードするためのHTML
上で定義したfile-modelディレクティブを使って、ファイルを選択するinputと、アップロードするためのボタンを用意する:
// index.html |
- コントローラ
AppControllerは後述 - 選択したファイルを
myFileというモデル(変数名)に格納することにする - ボタンが押されたら
appCtrlのuploadメソッドに、選択されたファイルmyFileを渡す
アップロードするサービス
ファイルを$httpで送る機能をAngularJSのサービスとして作成する:
// app.js |
$http.postを使うContent-Typeにundefinedを指定すると良きに計らってくれるらしい
ファイルをアップロードする
上で作成したファイルをアップロードするサービスを使って、コントローラ内からファイルをアップロードする:
// app.js |
- 依存関係に
fileUploadを含めて、それを使う