2012-10-06 7 views
17

Ho una direttiva in cui ho aggiunto un orologio sul modello 'existingfiles' dell'ambito della direttiva. Quando c'è un cambiamento nel modello attraverso l'ambito. $ Apply, non vi è alcuna chiamata a listener in watch.

Ecco il codice direttiva, hanno lasciato gentilmente sapere se mi manca qualcosa qui,

directive('fileuploadPlugin', function() { 
    var linkFn; 
    linkFn = function(scope, element, attrs) { 
     angular.element(element).ready(function() { 
      jQuery('#fileupload').fileupload({ 
       done: function (e, data) { 
        scope.$apply(function(scope) { 
         for(var i=0; i < data.result.filesuploaded.length; i++){ 
             scope.existingfiles.push(data.result.filesuploaded[i]); 
        };        
        }); 
       } 
     }); 
     scope.$watch('existingfiles', function(newValue, oldValue) { 
       element.imagesLoaded(function() { 
       scope.$apply(function() { 
        element.masonry({ 
         itemSelector : '.box' 
        }); 
       }); 
      }); 
     }); 
    }; 
    return { 
     templateUrl : 'templates/fileupload_plugin.htm', 
     restrict : 'A', 
     scope  : { 
      existingfiles : '=ngModel', 
     }, 
     link  : linkFn 
    }; 
    }) 

Ecco la mia chiamata alla direttiva,

<div fileupload-plugin ng-model="existingfiles"></div> 

Gentilmente vorrei sapere come assicurarsi quel modello è guardato correttamente

risposta

40

Il problema è stato risolto dando 'true' come terzo parametro di $ watch call. Trova qui, più informazioni sul terzo parametro,

Angular Docs on $rootScope

+0

Chi da thunk. 3 ° Parametro: objectEquality (opzionale) - {boolean =} - Confronta oggetto per uguaglianza piuttosto che per riferimento. –

+6

O ricordarsi di chiamare scope. $ Digest() dopo ogni modifica dell'ambito per forzare l'aggiornamento nel controller – Pencilcheck

+0

risolto per me, grazie! –

Problemi correlati