所以我在ngOnInit()中得到了以下代码:
ngOnInit() {
$('#inputForm').submit(function(e) {
e.preventDefault();
this.uploadFormData();
});
$('#fileUpload').on('change', function() {
const fileString = $('#fileUpload').val();
const fileType = $('#fileUpload').prop('files')[0].type;
if (fileType !== 'text/xml') {
$('#message').html('File to upload must be an XML file!!!');
if (!$('#message').hasClass('error')) {
$('#message').addClass('error');
}
} else {
$('#message').html('File to upload is an XML file!!!');
if ($('#message').hasClass('error')) {
$('#message').removeClass('error');
}
$('#message').addClass('correctFile');
}
});
}
这将关注onchange事件&当我提交表格时当我提交表单时,我想调用一个不在此ngOnInit()之外的公共函数,它看起来像这样:
public uploadFormdata(): void {
const form = $('#inputForm').val();
const files = ($('#fileUpload') as any).files;
const formData = new FormData();
const file = files[0];
formData.append('tenant', form[0]);
formData.append('title', form[1]);
formData.append('file', file, file.name);
this.uploadService.uploadForm(formData)
.subscribe(res => this.fileUploaded(res));
}
为什么赢得了" this.uploadFormData()"在我的ngOnInit()工作?它说" property' uploadFormData'类型' HTMLElement'"。
上不存在答案 0 :(得分:2)
使用箭头功能,以便this
引用您的组件的类。如果你不这样做,这将引用你绑定事件的DOM元素,即inputForm
字段
$('#inputForm').submit(e => {
e.preventDefault();
this.uploadFormData();
});
注意:你应该真的避免使用jQuery来操作DOM,因为angular不知道jQuery引起的变化。
答案 1 :(得分:2)
因为汇总表单中的this
上下文提到了$('#inputForm')
而不是组件的类。
在您的情况下,您必须将上下文this
保存到变量
ngOnInit() {
const $this = this;
$('#inputForm').submit(function(e) {
e.preventDefault();
$this.uploadFormData();
});
// ...
}
或者您应该使用箭头功能:
ngOnInit() {
$('#inputForm').submit((e) => {
e.preventDefault();
this.uploadFormData();
});
// ...
}
答案 2 :(得分:0)
查看元素仅在"之后加载OnInit",您可以使用 AfterViewInit
ngAfterViewInit() {
$('#inputForm').submit(function(e) {
e.preventDefault();
this.uploadFormData();
});
}

使用Element ref代替普通的JavaScript / jQuery选择器