web-dev-qa-db-fra.com

en utilisant un fichier de type d'entrée avec angular matériau 2

Comment puis-je utiliser angular matériel 2 boutons FAB pour ouvrir une boîte de dialogue d'entrée de navigation? Cela peut être fait en HTML de cette façon.

<button type="button">
    <label for="file-input">click</label>
</button>
<input type="file" id="file-input" style="display:none">

J'ai essayé de suivre la même approche avec le matériau 2, mais cela ne fonctionne pas.

<button md-mini-fab type="button">
    <label for="fileToUpload">
        <md-icon>add</md-icon>
    </label>
</button>
<input id="fileToUpload" type="file" style="display:none;">

Y a-t-il d'autres façons de fonctionner? Merci.

11
Saif

Voici une solution simple:

<button (click)="fileInput.click()">
  <md-icon>library_add</md-icon>
  <span>Select</span>
  <input #fileInput type="file" (change)="onFileInput($event)" style="display:none;" />
</button>
45
rhyttr

Vous devez simplement déclencher le click pour votre entrée de fichier.

<button md-mini-fab type="button" onclick="document.getElementById('fileToUpload').click()">
  <label for="fileToUpload"><md-icon>add</md-icon></label>
</button>
<input id="fileToUpload" type="file" style="display:none;">
15
anoop

Essaye ça:

<input #file type="file" [hidden]="true" accept="image/*" (change)="upload(file.files)">
<button mat-button #upload (click)="file.click()">Upload file</button>

<mat-button> provient de https://material.angular.io

Nous masquons le bouton d'entrée de base et lions le bouton de matériau au téléchargement de fichier.

11
Ashwin R

Je ne suis pas sûr de vos cas, mais dans mon application Angular5, j'ai utilisé cette structure HTML pour télécharger des fichiers sur le serveur:

<label for="uploadPicture" class="upload-file">
   <mat-icon>add_a_photo</mat-icon>
</label>
<input type="file"
       id="uploadPicture"
       class="hidden-input"
       accept="image/jpeg, .jpeg, image/png, .png, image/pjpeg, .jpg"
       (change)="selectFile($event.target.files[0])">

Dans mon cas, cette solution fonctionne très bien. Pas besoin de déclencher un événement click, car lorsque vous cliquez sur <label> qui concerne input c'est la même chose que click sur input.

7
alexJS

Vous pouvez utiliser un bouton et une entrée. Assurez-vous que le bouton ne contient pas d'entrée.

<button (click)="fileInput.click()">Upload</button>
<input #fileInput type="file" (change)="onFileInput($event)" multiple style="display:none;" />

Vous pouvez également utiliser une étiquette contenant une entrée.

<label>
    <mat-icon>add</mat-icon>
    <input type="file" (change)="onFileInput($event)" multiple />
</label>
0
Jun711

Il peut s'agir d'une combinaison de md-button, md-dialog et md-input. Le bouton mini fab doit avoir un événement click pour déclencher le composant md-dialog.

<button md-mini-fab type="button" (click)="openDialog()">
    <label for="fileToUpload">
      <md-icon>add</md-icon>
    </label>
</button>

Dans le composant md-dialog, le champ d'entrée md peut être ajouté.

<h1 md-dialog-title>Dialog</h1>
<div md-dialog-actions>
  <md-input-container>
    <input mdInput id="fileToUpload" type="file">
  </md-input-container>
  <p>
    <button md-button (click)="dialogRef.close('Option 1')">Option 1</button>
    <button md-button (click)="dialogRef.close('Option 2')">Option 2</button>
  </p>
</div>

Veuillez voir cet exemple Plunker pour obtenir tous les détails/spécifiques.

0
Nehal