Ich versuche, das hochgeladene img nach der Upload-Task zu zeigen, aber wegen des asynchronen Ladens versucht die Ansicht, es anzuzeigen, bevor der Upload beendet ist.Angular 2 Firebase Storage - Bildvorschau beim Hochladen
Dies ist die Methode:
upload(value){
let file = value.target.files[0];
let storageRef = firebase.storage().ref('noticias/' + file.name);
let uploadTask = storageRef.put(file);
uploadTask.on(firebase.storage.TaskEvent.STATE_CHANGED,
function(snapshot) {
let progress = (snapshot.bytesTransferred/snapshot.totalBytes) * 100;
console.log('Upload is ' + progress + '% done');
switch (snapshot.state) {
case firebase.storage.TaskState.PAUSED: // or 'paused'
console.log('Upload is paused');
break;
case firebase.storage.TaskState.RUNNING: // or 'running'
console.log('Upload is running');
break;
}
}, function(error) {
switch (error) {
case 'storage/unauthorized':
break;
case 'storage/canceled':
break;
case 'storage/unknown':
break;
}
}, function() {
// Upload completed successfully, now we can get the download URL
let downloadURL = uploadTask.snapshot.downloadURL;
console.log('Upload done!');
});
storageRef.getDownloadURL().then(url => this.imgUrl = url);
this.uploadedImg = true;
}
Und dies ist die Ansicht:
<img *ngIf="uploadedImg" [src]="imgUrl" />
Die letzten beiden Zeilen des Verfahrens sind die, die zu früh welche Last Art und Weise. Ich habe auch versucht, sie in die Erfolgsfunktion zu verschieben. Das Problem ist, dass, wenn ich sie dorthin verschiebe, this
nicht mehr auf die Klasse verweist und ich die Werte in der Ansicht nicht ändern kann.
Der schlimmste Teil ist, dass ich bereits über dieses Muster wusste. Ich bin gerade vom Lernen von JS gesprungen, um für Angular zu früh zu gehen ... Danke! – cerealex