2013-07-25 6 views
5

Sto usando questo controllo: http://blueimp.github.io/jQuery-File-Upload/angularjs.html per caricare file in modo angolare, una volta che il file è stato caricato sul mio server, restituisco un URL e vorrei visualizzarlo al client sul callback di successo. Il plugin in uso è solo un normale caricamento di file jquery, ma è disponibile un wrapper direttiva angolare che sto usando.

Ecco come lo definisco il callback:

$scope.options = { 
    url: '/api/Client/', 
    type: 'PUT', 
    done: function (event, data) { 
     var scope = angular.element(this).scope(); 
     scope.test = "doesn't work"; 
     scope.$apply(function() { 
      scope.test = "this doesn't work either"; 
     }); 
    } 
}; 

Il file carica bene, e la funzione di fatto si chiama però non sono in grado di aggiornare la vista. Inizialmente ho provato cambiando scope, poi ho capito che avrei richiesto la funzione $ apply() ma non funzionava neanche.

Ho anche provato

$scope.options = { 
    url: '/api/Client/', 
    type: 'PUT', 
    done: function (event, data) { 
     $scope.test = "doesn't work"; 
     $scope.$apply(function() { 
      $scope.test = "this doesn't work either"; 
     }); 
    } 
}; 

e che anche non funziona. Non sono sicuro del motivo per cui non sta aggiornando la mia vista, e poiché la chiamata conclusa è solo un evento di successo ajax, non vedo come questo specifico plugin possa causare problemi con $ scope. $ Apply. Sto usando AngularJs 1.1.5, ma ho anche provato 1.0.7 e sto ottenendo lo stesso problema.

+0

Quando si chiama apply si ottiene un errore che l'applicazione/digest è già in corso? –

+0

No, nessun errore. Semplicemente non fa niente. Se lo chiamo più volte e guardo il valore di $ scope.test, vedo il valore impostato in precedenza. La vista non si aggiorna con quel valore –

+0

La seconda versione sembra davvero che dovrebbe funzionare per me, se viene richiamata la funzione done. –

risposta

11

Copiato dal mio commento per renderlo più chiaro quale fosse il problema:

sono riuscito a capire il problema. Usando il loro esempio avevo un duplicato di ng-controller (il loro esempio era nidificato nell'altro mio controller) e anche se entrambi usavano lo stesso controller sembra che aggiorni solo tutto ciò che era all'interno dello scope del controller annidato. Quando si rimuove l'attributo duplicato ng-controller tutto funziona correttamente.

+0

Aveva lo stesso identico problema. È interessante notare che i collegamenti nell'elemento radice (prima occorrenza del tag ng-controller) non sono stati aggiornati. – Joon

+0

Sei il migliore! Stavo vivendo lo stesso problema e la rimozione della duplicazione del controller ha ordinato tutto. – devTimmy

1

Ho pensato di farmi ascoltare anche io, dato che ho passato un'intera giornata a occuparmi di questo problema.

Assicurarsi che nel codice HTML si applichi il ng-controller a un wrapper div, non a un elemento ul.