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
を含めて、それを使う