Angular 如何在角材质中使用输入类型文件

Angular 如何在角材质中使用输入类型文件,angular,angular-material,material-design,Angular,Angular Material,Material Design,如何在角材质中使用输入类型文件 嗨,我正在使用角材料进行设计。当我在AngleMaterial站点上运行时,并没有输入类型文件元素。任何人都知道这一点。Angular Material尚不支持文件上载的解决方案。 除了这个,还有其他选择。e、 g使用外部库 角度材质文件上传: 支持的功能: 拖放 常见上传 进度条 文件大小和更多 ngx材料文件输入: 支持的功能: ngx mat文件输入component,用于内部角度材料mat表单字段 带有maxContentSize的FileValid

如何在角材质中使用输入类型文件


嗨,我正在使用角材料进行设计。当我在AngleMaterial站点上运行时,并没有输入类型文件元素。任何人都知道这一点。

Angular Material尚不支持文件上载的解决方案。 除了这个,还有其他选择。e、 g使用外部库

角度材质文件上传

支持的功能:

  • 拖放
  • 常见上传
  • 进度条
  • 文件大小和更多
ngx材料文件输入

支持的功能:

  • ngx mat文件输入
    component,用于内部角度材料
    mat表单字段
  • 带有
    maxContentSize
    FileValidator
    ,用于限制文件大小
  • a
    ByteFormatPipe
    以人类可读的格式格式化文件大小
  • 还有更多的小功能
更新

如果您只需要一个没有外部库的变通方法,请参见此处的答案

如果您只需要一个显示良好的文件输入按钮,这里有一个解决方法

Html

受此棱角材料启发,Github发表评论
我建议您结账

它是非常有棱角的材料


如果你不想使用一些奇怪的解决方法,那么就不要将
输入
放入
mat表单字段
。您可以将其放置在
mat表单字段
之外,但仍可以将该值包含在
表单组
中。检查示例

<form [formGroup]="someForm"  (ngSubmit)="onSubmit()">
            <!--input outside the form-field-->
            <input type="file" (Change)="onChange($event)"/>
            <mat-form-field>
                <!--input inside the form-field-->
                <input matInput formControlName="someFCN">
            </mat-form-field>
            <button mat-raised-button>Submit</button>
</form>




import { FormBuilder, FormGroup, Validators } from '@angular/forms';

someForm: FormGroup;

constructor(private formBuilder: FormBuilder) {}
ngOnInit(): void {
    this.someForm = this.formBuilder.group({
          someFCN: [{ value:'', disabled: false },Validators.required],
          file: { value:'', disabled: false }
        });
}

onChange(event: Event) {
    /*not sure what you want to do with file, i'll just set
    selected file´s name as value, but obviously u can do much more than just get file´s name.*/
    
    this.someForm.controls['file'].setValue(event.target.files[0].name);
}

onSubmit() {
    return this.someForm.getRawValue();
}

提交
从“@angular/forms”导入{FormBuilder、FormGroup、Validators};
某种形式:FormGroup;
构造函数(私有formBuilder:formBuilder){}
ngOnInit():void{
this.someForm=this.formBuilder.group({
someFCN:[{value:'',已禁用:false},验证器。必需],
文件:{值:“”,已禁用:false}
});
}
onChange(事件:事件){
/*我不确定你想用这个文件做什么,我只设置
选择文件名作为值,但显然您可以做的远不止是获取文件名*/
this.someForm.controls['file'].setValue(event.target.files[0].name);
}
onSubmit(){
返回这个.someForm.getRawValue();
}

可能重复:是的,可能,但我希望使用这种格式使用Angular ay而不是查询选择器不是更好吗?像@ViewChild?我认为最好在
onFileSelected($event)
函数中添加
$event
,这样您就不需要在输入中使用
id=“file”
onFileSelected() {
  const inputNode: any = document.querySelector('#file');

  if (typeof (FileReader) !== 'undefined') {
    const reader = new FileReader();

    reader.onload = (e: any) => {
      this.srcResult = e.target.result;
    };

    reader.readAsArrayBuffer(inputNode.files[0]);
  }
}
<form [formGroup]="someForm"  (ngSubmit)="onSubmit()">
            <!--input outside the form-field-->
            <input type="file" (Change)="onChange($event)"/>
            <mat-form-field>
                <!--input inside the form-field-->
                <input matInput formControlName="someFCN">
            </mat-form-field>
            <button mat-raised-button>Submit</button>
</form>




import { FormBuilder, FormGroup, Validators } from '@angular/forms';

someForm: FormGroup;

constructor(private formBuilder: FormBuilder) {}
ngOnInit(): void {
    this.someForm = this.formBuilder.group({
          someFCN: [{ value:'', disabled: false },Validators.required],
          file: { value:'', disabled: false }
        });
}

onChange(event: Event) {
    /*not sure what you want to do with file, i'll just set
    selected file´s name as value, but obviously u can do much more than just get file´s name.*/
    
    this.someForm.controls['file'].setValue(event.target.files[0].name);
}

onSubmit() {
    return this.someForm.getRawValue();
}