2017-01-22 2 views
1

Ich habe den folgenden Code:AngularJS Eingang onchange Ereignis controllerAs Datei

<input onchange="angular.element(this).scope().filesChanged(this)" fileInput="controlFormCtrl.formData.episodeFile"> 

Die ausgewählte Datei wird auf den Umfang weitergegeben werden, und wird in meinem Controller auf diese Weise zugänglich sein:

var thisScope = this; 
    var rootScope = $root; 
    var ctrlScope = $scope; 
    ctrlScope.filesChanged = function(elm) { 
    thisScope.file = elm.files[0]; 
    } 

elm.files hat folgende Daten:

lastModified: 1485109128000 
lastModifiedDate: Sun Jan 22 2017 19:18:48 GMT+0100 (CET) 
name:"border-image.png" 
size:1353 
type:"image/png" 
webkitRelativePath:"" 
__proto__: File 

Allerdings ist die thisScope.file nicht s zu sein et.

Was kann ich tun, um das Problem zu beheben?

+0

ctrlScope.file statt thisScope.file funktionieren würde, aber ich bin mit 'controllerAs', wie ich unter einander verschachtelt mehrere Controller haben. – Coder

+2

Meine Vermutung wäre, dass Sie 'ctrlScope. $ Apply();' ausführen müssen, um zu wissen, dass 'thisScope' sich geändert hat. –

+0

@RaphaelRafatpanah Guter Ruf, da "onchange" anstelle von "ng-change" verwendet werden muss (was für diese Art der Eingabe nicht unterstützt wird), hat Angular keinen $ Digest-Zyklus ausgeführt. –

Antwort

1

Sie müssen ctrlScope.$apply(); laufen Winkel wissen zu lassen, dass thisScope geändert hat, dies jedoch nur dann ausgeführt werden soll, nachdem die FileReader die Datei geladen wird.

Ich empfehle die Verwendung der ngf-select Direktive, um Datei-Uploads zu behandeln.

https://github.com/danialfarid/ng-file-upload

Verwandte Themen