2014-04-17 19 views
6

Sto cercando di aggiornare alcuni testi su una pagina che fa parte di $ scope. Ma continuo a ricevere questo errore:

Error: [$rootScope:inprog] [http://errors.angularjs.org/1.2.15/$rootScope/inprog?p0=%24apply][1] 
at Error (native) 
at https://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js:6:450 
at m (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js:101:443) 
at h.$apply (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js:108:301) 
at h.$scope.changeLang (http://treenovum.es/xlsmedical/js/medical-app.js:80:16) 
at https://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js:169:382 
at https://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js:186:390 
at h.$eval (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js:108:40) 
at h.$apply (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js:108:318) 
at HTMLAnchorElement.<anonymous> (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js:186:372) 

Ovviamente sto facendo qualcosa di sbagliato. :) Qualche idea su come posso risolvere questo problema? Voglio che la pagina si aggiorni alle nuove variabili nell'ambito.

Questo è il codice che sto utilizzando per l'aggiornamento:

medicalApp.controller('MainCtrl', function($scope, $cookies, getTranslation) { 
    getTranslation.get(function(data){ 
     $scope.translation = data; 
    }); 

    $scope.changeLang = function (lang) { 
     console.log(lang); 
     $cookies.lang = lang; 
     $scope.$apply(function(){ 
      getTranslation.get(function(data){ 
       $scope.translation = data; 
       console.log(JSON.stringify($scope.translation)); 
      }); 
     }); 
    }; 
}); 

html:

<body ng-controller="MainCtrl"> 
    ... 
      <div class="header-lang col-xs-4"> 
       <p> 
        <a href="#" ng-click="changeLang('de')">DE</a> | 
        <a href="#" ng-click="changeLang('fr')">FR</a></p> 
      <div>{{ translation.text }}</div> <---- Example variable I want updated. 
    ... 

sto utilizzando anche ngRoute con controller separati per ogni pagina che carico, se che ha qualcosa da fare con esso?

risposta

8

Si sta utilizzando $scope.$apply(...) all'interno della funzione changeLang in modo da ottenere l'errore "già in un digest" comune. Non è necessario effettuare la chiamata a getTranslation all'interno di $ scope. $ Apply (...) perché ng-click è già stato utilizzato. Strappalo e dovrebbe funzionare. Inoltre, ti consiglio di utilizzare una versione non ridotta di angular per dev in modo da poter vedere errori migliori nella tua console.

+0

non sono sicuro se la tua soluzione funziona o no, ma ho realizzato che il problema è un'altra cosa. getTranslation è una factory chiamata quando la pagina viene caricata, ma quando la chiamo una seconda volta viene ignorata. Sai come risolvere? –

+0

Ho bisogno di vedere il codice getTranslation, ma sembra che tu abbia a che fare con la durata di 'singleton' di un servizio. Ricorda che l'angolatura estrae le istanze Singleton dal suo contenitore di Iniezione di Dipendenza. – SonOfNun

16

Se il modello non cambia dopo aver cambiato i modelli ed è necessario utilizzare $scope.$apply, è possibile utilizzare $scope.$applyAsync anziché questo.

https://github.com/angular-ui/ui-codemirror/issues/73

+0

Questo risolve il mio problema. Molte grazie !! –

+0

Meraviglioso! Questo ha risolto un problema che stavo avendo, molto obbligato! –

Problemi correlati