2014-12-19 11 views
9

Attualmente sto usando ng-flow per eseguire un upload di file. Sembra che l'azione predefinita di selezionare un file sia caricare immediatamente. Mi piacerebbe scavalcare questo in modo che i file siano selezionati e caricati solo al clic del pulsante. Forse sto fraintendendo la documentazione, ma finora ho il seguente:ng-flow upload programmaticamente

<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> 

Questo sembra funzionare e posso vedere la richiesta di rete di uscire. Ho trovato flow.js upload file on click e ho tentato di seguire la risposta suggerita, tuttavia $flow non era definito nella rispettiva funzione.

Quindi, come si carica a livello di codice i file utilizzando ng-flow?

risposta

12

All'inizio, l'evento flow-files-submitted viene attivato quando l'utente seleziona un file (nome fuorviante). Quindi quando assegni $flow.upload() ad esso, lo fai caricare immediatamente dopo la selezione del file.

La seconda cosa è ottenere $ oggetto flusso nel controller. Due modi mi viene in mente:

A. Come dire l'istruzione, è necessario utilizzare l'attributo flow-name:

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

Poi è necessario riferimento alla $flow nel vostro $scope.obj.flow proprietà ed è possibile utilizzare il metodo $scope.obj.flow.upload() in qualsiasi punto controller.

B. Metti il ​​tuo "Carica" ​​pulsante all'interno del blocco direttiva flusso (come discendente di elemento con l'attributo flow-init) e utilizzare $flow proprietà del campo di applicazione della direttiva come parametro nella ng-click, ad esempio:

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

e all'interno di myUploadMethod(param) basta chiamare il numero param.upload().