Datei-upload von <input type="file">
Verwendung von Winkel-2 beta, ich kann nicht scheinen, um eine <input type="file">
zu arbeiten.
Diagnose, die ich sehen kann, zwei-Wege Bindung für andere type
s wie text
.
<form>
{{diagnostic}}
<div class="form-group">
<label for="fileupload">Upload</label>
<input type="file" class="form-control" [(ngModel)]="model.fileupload">
</div>
</form>
In meinem Typoskript-Datei habe ich folgende Diagnose-Linie:
get diagnostic() { return JSON.stringify(this.model); }
Könnte es sein, dass es das Problem nicht JSON? Der Wert ist null
.
Ich kann nicht wirklich überprüfen Sie den Wert des input
. Yven obwohl der text neben "Datei Wählen ..." - updates, ich sehe nicht, Unterschiede in den DOM-aus irgendeinem Grund.
- Ich habe die Datei-upload mit diesem Weg. Sehen, ob es hilft : stackoverflow.com/a/43288706/3764156
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, dass es nicht unterstützt wird. Wenn Sie einen Blick auf diese
DefaultValueAccessor
Richtlinie (siehe https://github.com/angular/angular/blob/master/modules/angular2/src/common/forms/directives/default_value_accessor.ts#L23). Sie werden sehen, dass der Wert, der verwendet wird zum aktualisieren der gebundenen element ist$event.target.value
.Dies gilt nicht im Falle von Vorleistungen, die mit Typ
file
da das file-Objekt kann erreicht werden$event.srcElement.files
statt.Weitere details, können Sie einen Blick auf diese plunkr: https://plnkr.co/edit/ozZqbxIorjQW15BrDFrg?p=info:
ngModel
verwendet werden können für etwas anderes als das erzeugen von JSON 😉 Vielleicht mit derfiles
- Attribut auf den Wert der gebundenenngModel
könnte etwas möglich... Meine 2 Centevent
keinensrcElement
EigenschaftGibt es eine etwas bessere Möglichkeit zum Zugriff auf angehängte Dateien. Könnten Sie template Referenz-variable um eine Instanz des input-Elements.
Hier ist ein Beispiel, basierend auf die erste Antwort:
Hier ist ein Beispiel-app um das zu demonstrieren, in Aktion.
Vorlage referenzieren Variablen, die nützlich sein könnten, könnten Sie z.B. Zugriff via @ViewChild direkt in den controller.
Andere Weise mit Vorlage Referenz-variable und ViewChild, wie vorgeschlagen, durch Frelseren:
Siehe auch https://stackoverflow.com/a/40165524/4361955
Versuchen, diese kleine lib, funktioniert mit Eckigen 5.0.0
Quickstart Beispiel mit ng2-Datei-upload 1.3.0:
Benutzer auf die benutzerdefinierte Schaltfläche, die Trigger dialog zum hochladen von versteckten input type="file" Upload startet automatisch nach der Auswahl einer einzelnen Datei.
app.- Modul.ts:
your.component.html:
Ihr.Komponente.ts:
Alternative lib, funktioniert in Eckigen 4.2.4, erfordert aber einige workarounds, um zu übernehmen Winkel-5.0.0
Wenn Sie ein Komplexes Formular mit mehreren Dateien und anderen inputs hier ist eine Lösung, die spielt schön mit
ngModel
.Es besteht aus einer Datei input-Komponente umschließt, die eine einfache Datei-Eingang und implementiert die
ControlValueAccessor
- Schnittstelle, um es konsumierbar durchngModel
. Die Komponente stellt dieFileList
ObjektngModel
.Diese Lösung basiert auf diese Artikel.
Die Komponente verwendet wird wie dieses:
Hier ist die Komponente-code:
Und hier ist die Komponente Vorlage:
nur versuchen
(onclick)="this.value = null"
in Ihre html-Seite hinzufügen onclick-Methode zum entfernen von vorherigen Wert, so dass Benutzer können wählen Sie dieselbe Datei erneut.