2014-12-19 12 views
9

Ich verwende derzeit ng-flow, um einen Datei-Upload durchzuführen. Es scheint, dass die Standardaktion zum Auswählen einer Datei das sofortige Hochladen ist. Ich möchte dies überschreiben, so dass Dateien ausgewählt und nur per Knopfdruck hochgeladen werden. Vielleicht bin Verlesen ich die Dokumentation, aber bisher habe ich folgendes:ng-flow upload programmgesteuert

<div flow-init="{target: '/upload'}" 
    flow-files-submitted="$flow.upload()" 
    flow-file-success="$file.msg = $message"> 

    <input type="file" flow-btn/> 
    Input OR Other element as upload button 
    <span class="btn" flow-btn>Upload File</span> 

    <table> 
    <tr ng-repeat="file in $flow.files"> 
     <td>{{$index+1}}</td> 
     <td>{{file.name}}</td> 
     <td>{{file.msg}}</td> 
    </tr> 
    </table> 
</div> 

Dies scheint zu funktionieren und ich kann die Netzwerkanforderung sehen Ausgehen. Ich habe flow.js upload file on click lokalisiert und versucht, der vorgeschlagenen Antwort zu folgen, jedoch $flow war undefined in der jeweiligen Funktion.

Also, wie programmiert man Dateien mit ng-flow programmatisch?

Antwort

12

Zuerst wird flow-files-submitted Ereignis ausgelöst, wenn Benutzer eine Datei auswählen (irreführender Name). Wenn Sie also $flow.upload() zuweisen, wird das Hochladen sofort nach der Dateiauswahl durchgeführt.

Zweite Sache ist, $ Flow-Objekt in Ihrem Controller zu bekommen. Zwei Möglichkeiten, kommt mir in den Sinn:

A. Als Anweisung sagen, haben Sie flow-name Attribut verwenden:

<div flow-init flow-name="obj.flow"> 

Dann haben Sie Bezug auf $flow in Ihr $scope.obj.flow Eigenschaft und Sie $scope.obj.flow.upload() Methode überall dort verwenden, können in Ihrem Regler.

B. Setzen Sie Ihren Knopf im Fluss Richtlinie Block "Upload" (als Nachkomme Element mit flow-init Attribute) und $flow Eigentum der Richtlinie Umfangs als Parameter in ng-click verwenden, zum Beispiel:

<button type="button" ng-click="myUploadMedhot($flow)">Upload</button> 

und innerhalb myUploadMethod(param) rufen Sie einfach param.upload().