2013-05-03 5 views
10

Ich erhalte nur die JSON-Daten von den Diensten im Controller.

Und ich verwende eine Callback-Funktion, um die Erfolgsmeldung zu drucken, wenn sie geladen wurde. Es funktioniert gut, aber es ist auch ein Fehler zu werfen, die ich in der Frage

erwähnt
//JSON file 
{ 
"pc":"name" 
} 

// angular services 
var service = angular.module('Services', ['ngResource']). 
factory('Widgets', function($resource){ 
    return $resource('/json/home.json', {}, { 
     query: {method:'GET', params:{}, isArray:false} 
    }); 
}); 

//controller 
function editWidget($scope, Widgets) { 
$scope.data = Widgets.query(function(data) { 
    alert("Success Data Loaded ---> " + JSON.stringify(data.pc)); 
}); 
} 
+1

Es gibt nichts, mit diesem Code falsch ist - Ihr Problem woanders liegen. Diese Fehlermeldung wird normalerweise angezeigt, wenn Sie einen $ scope ausführen. $ Apply (...) ' – joakimbl

+0

Schlägt die Warnung fehl? Wie wäre es mit einer console.log, um den Wert der JSON zu sehen, wenn die Warnung Ihnen ein Problem gibt? – BoxerBucks

+0

@BoxerBucks Ja, wenn ich console.log benutze, wird der Fehler nicht angezeigt. aber ich wollte nur die Ursache des Fehlers wissen. –

Antwort

12

alert sowie confirm und prompt wird die Ausführung von Code (blockiert den Thread) Pause, während der Timeouts und Intervalle gehen alles drunter und drüber, wenn sie während der Pause ausgelöst worden sein sollten. Die $digest Schleife besteht aus zwei kleineren Schleifen, die Warteschlange und die $watch Liste verarbeiten. Die -Warteschlange wird zum Planen von Arbeiten verwendet, die außerhalb des aktuellen Stapelrahmens, aber vor der Darstellung des Browsers ausgeführt werden müssen. Dies geschieht normalerweise mit setTimeout(0). Ihre Warnung während dieser Zeit verursacht das Problem.

+0

Dies ist definitiv das Problem, aber gibt es eine Lösung jenseits der Verwendung von Alarm? – RAC

+0

Verwenden Sie nicht blockierende Warnungen (Modale). Sie können window.alert sogar überschreiben, um Ihr Modal aufzurufen. Sie können die modalen Warnungen auch stylen und besser aussehen als native Warnungen. – TheSharpieOne

10

Sie können $ timeout verwenden, um nach Abschluss des Digest-Zyklus eine Warnung auszuführen und auf diese Weise diesen Fehler zu vermeiden.

$timeout(function() { 
    alert('Alert text'); 
}); 

Vergessen Sie auch nicht $ timeout in der Richtlinie

0
if(!confirm('Your message')){ 
    return false; 
}else { 
    return false; 
} 

return false in beiden Fällen zu injizieren.

-2

@TheSharpieOne ist richtig, es ist Arbeit für mich.

function delayalert(messagestr){ 
 
      setTimeout(function(){ 
 
       alert(messagestr); 
 
      },0); 
 
}

Verwandte Themen