如何检查通过Angular中的数组循环的文件扩展名?
Posted
技术标签:
【中文标题】如何检查通过Angular中的数组循环的文件扩展名?【英文标题】:How to check file extension looping through an array in Angular? 【发布时间】:2021-06-23 15:13:08 【问题描述】:测试数据组件.ts
export class TestDataManagementComponent
requirement = [] as any;
testDataFileType = "doc,docx,xls,xlsx,pdf,application/msword,application/msexcel,application/pdf";
isNotAccepted = false;
submitForm()
var splitted = this.testDataFileType.split(",");
let payload = new FormData();
for (let i = 0; i < this.requirement.length; i++)
payload.append('requirements', this.requirement[i]);
splitted.forEach(function (value)
for(let i = 0 ; i < this.requirement.length; i++)
if(this.requirement[i].name.split('.').pop() === value)
this.isNotAccepted = false;
break;
if(this.requirement[i].name.split('.').pop() !== value)
this.isNotAccepted = true;
break;
);
错误类型错误:无法读取未定义的属性“要求”
请帮我弄清楚为什么没有定义“要求”,以及检查每个文件扩展名的最佳方法是一次循环遍历类型数组。
【问题讨论】:
【参考方案1】:您遇到的问题与this
的引用有关。this
在 JS 中非常混乱,在编写代码时需要非常谨慎。
问题来了:
splitted.forEach(function (value)
for(let i = 0 ; i < this.requirement.length; i++)
..... rest of the code
您假设在类中,this
将引用对象/类。好吧,实际上并没有。 this
未定义为在您编写代码时引用包含它的对象。
相反,这是指whoever called the code in which it’s being used
。
所以要么你需要明确地将this
绑定到方法上,要么使用arrow
函数(默认情况下有this
的类引用)。
例如:
splitted.forEach(value =>
for (let i = 0; i < this.requirement.length; i++)
if (this.requirement[i].name.split(".").pop() === value)
this.isNotAccepted = false;
break;
if (this.requirement[i].name.split(".").pop() !== value)
this.isNotAccepted = true;
break;
);
这是一个很好的阅读:MDN : this 工作示例:Working example
【讨论】:
以上是关于如何检查通过Angular中的数组循环的文件扩展名?的主要内容,如果未能解决你的问题,请参考以下文章
Angular2,Typescript:如何在每页显示一个元素的数组中检查单选按钮?