Не удается использовать ngx-mat-file-input

#angular #typescript #file #angular-material #form-control

#angular #typescript #файл #angular-материал #управление формой

Вопрос:

Я использую Angular 10 и Angular Materiel для создания некоторых форм. Я попробовал библиотеку материалов NGX Angular, потому что это единственная, которая содержит файловый ввод, совместимый с Angular Material. Итак, я установил библиотеку, импортировал ее в свой модуль приложения, но, похоже, я не могу использовать html-тег ngx-mat-file-input. Можете ли вы дать ответ на мою проблему? Спасибо!

html-файл :

   <form [formGroup]="xxxForm" (ngSubmit)="onSubmit()">
    <mat-form-field>
      <ngx-mat-file-input formControlName="basicfile" placeholder="Basic Input" ></ngx-mat-file-input>
      <mat-icon matSuffix>folder</mat-icon>
    </mat-form-field>
  </form>
  

ts-файл :

 import { Component, OnInit, OnDestroy } from '@angular/core';
import { Validators, FormBuilder, FormControl, CheckboxRequiredValidator, FormGroup } from '@angular/forms';
import { FileInput } from 'ngx-material-file-input';
@Component({
  selector: 'app-confirmation-retour',
  templateUrl: './confirmation-retour.component.html',
  styleUrls: ['./confirmation-retour.component.scss']
})
export class ConfirmationRetourComponent implements OnInit, OnDestroy {

  xxxForm = this.fb.group({
    basicfile: ['', [Validators.required]],
    });

  constructor(private fb: FormBuilder,) {
  }

  ngOnInit() {
  }

  ngOnDestroy() {
  }

  onSubmit() {
    console.log('hello');
  }

}
  

app.module.ts :

 import { MaterialFileInputModule } from 'ngx-material-file-input';
import { MatInputModule } from '@angular/material/input';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatSelectModule } from '@angular/material/select';
import { NgModule, LOCALE_ID } from '@angular/core';
import { BrowserModule, HammerModule } from '@angular/platform-browser';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { LayoutModule } from '@angular/cdk/layout';
import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { RetoursComponent } from './retours.component';
import { CommandesComponent } from './commandes.component';
import { ConfirmationRetourComponent } from './confirmation-retour.component';

@NgModule({
    declarations: [
        RetoursComponent,
        CommandesComponent,
        ConfirmationRetourComponent,
    ],
    imports: [
        BrowserModule,
        BrowserAnimationsModule,
        LayoutModule,
        HttpClientModule,
        FormsModule,
        MatFormFieldModule,
        MatSelectModule,
        MatInputModule,
        MaterialFileInputModule,
        ReactiveFormsModule, 
    ],
    exports: [],
    providers: [
    ],
    bootstrap: [AppComponent]
})
export class AppModule {
    constructor() { }
}
  

И появляется эта ошибка :

скриншот консольного навигатора

Ответ №1:

Ваш AppModule и HTML, похоже, в порядке. Я думаю, проблема здесь в том, как вы инициализируете саму форму. Я бы рекомендовал вам внести следующие изменения в ваш TS-файл:

файл TypeScript :

 import { Component, OnInit, OnDestroy } from '@angular/core';
import { Validators, FormBuilder, FormControl, CheckboxRequiredValidator, FormGroup } from '@angular/forms';
import { FileInput } from 'ngx-material-file-input';
@Component({
  selector: 'app-confirmation-retour',
  templateUrl: './confirmation-retour.component.html',
  styleUrls: ['./confirmation-retour.component.scss']
})
export class ConfirmationRetourComponent implements OnInit, OnDestroy {

  xxxForm: FormGroup;

  constructor(private fb: FormBuilder) {
  }

  ngOnInit() {
  xxxForm = this.fb.group({
    basicfile: ['', [Validators.required]],
    });
  }

  ngOnDestroy() {
  }

  onSubmit() {
    console.log('hello');
  }

}
  

Есть несколько примеров, с которыми вы могли бы проверить и сравнить свой код, вот пример stackblitz того, чего вы пытаетесь достичь.

Комментарии:

1. Во-первых, спасибо за ваш ответ. Я попробовал ваше решение, и далее, я копирую тот же код, что и в примере stackbliz, и он не работает. Я не знаю, может ли это быть связано с версией Angular, Angular Materiel и ngx-mat-file-input. Я предоставляю вам свои версии и попытаюсь понизить их для тестирования. «@angular/core»: «^ 10.0.9», «@angular /forms»: «^10.0.9», «@angular/material»: «^10.1.3», «ngx-material-file-input»: «^2.1.1»,

Ответ №2:

РЕДАКТИРОВАТЬ: Я решил свою проблему, но теперь я не понимаю, почему это не сработало так, как я делал раньше. Для тех, у кого может возникнуть эта проблема, мое решение заключается в создании MaterialModule, который я могу импортировать и экспортировать в моем AppModule. Это похоже на этот stackblitz, но с AppMaterialModule также в модуле экспорта :https://stackblitz.com/edit/material-file-input?file=src/app/app.module.ts

Я надеюсь, что это поможет некоторым другим ребятам.