以下に実際の例を示しますが、それは正しいアプローチではないと思います!
私の要件は次のとおりです。
- 外部プラグインは使いたくない!
- コントローラーを構文として使用する
- タイプスクリプトを使用する
HTML:
<input type="file" name="file" onchange="angular.element(this).scope().uploadFile(this.files)" />
コントローラ:
module Test {
export class TestController {
MessageUpload: string;
vm: any;
static $inject = [ 'Factory','$state', '$scope'];
constructor(private Factory:IFactory, private $state: ng.ui.IStateService, private $scope: any) {
$scope.vm = this;
$scope.uploadFile = this.uploadFile;
this.vm = this;
}
/* ... */
/* ... */
/* ... */
get(){/* .... */}
uploadFile(files) {
this.vm.MessageUpload = 'Uploading file. Please wait...';
var fd = new FormData();
fd.append('file', files[0]);
this.vm.Factory.upload(fd).then((r) => {
this.vm.MessageUpload = 'Completed ...';
this.vm.get();
});
}
}
}
最後のメモ:
- in
uploadFile()
:this
が参照されるので、 and$scope
にアクセスできるようにするには、どうにかしてコントローラー インスタンスを渡す必要があります。関数でもが参照されます。MessageUpload
get()
get()
this
$scope
this
これをリファクタリングして、コントローラーへの参照としてアップロードおよび使用できるようにする方法を知っている人はいますか?