我在下面有一个工作示例,但我认为这不是正确的方法!
我的要求是:
- 我不想使用外部插件!
- 使用控制器语法
- 使用打字稿
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
被引用,$scope
所以我必须以某种方式传递控制器实例才能访问MessageUpload
andget()
。甚至在get()
功能this
上也被提及$scope
。
有谁知道如何重构它以实现上传和this
用作对控制器的引用。