2013-05-03 21 views
10

kullanırken angularjs içinde devam eden $ digest denetleyicideki servislerden json verilerini alıyorum.Hata: Uyarı

Ve yüklendiğinde başarı iletisini yazdırmak için bir geri arama işlevi kullanıyorum. bu süre boyunca zaman aşımı ve aralıkları gidin kod çalıştırılmasına (blok iplik) duraklar yanı confirm ve prompt olarak, iyi çalışıyor ama aynı zamanda bu soruya

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

. Bir "$ scope. $ Apply (...)" – joakimbl

+0

yaptığınızda genellikle bu hata iletisini alırsınız Uyarı başarısız mı? Uyarı size sorun çıkarsa json değerini görmek için bir console.log'u kullanmaya ne dersiniz? – BoxerBucks

+0

@BoxerBucks, ben konsol.log kullanırken hata atmıyor. ama sadece hatanın sebebini bilmek istedim. –

cevap

12

alert belirtilen bir hata atıyor duraklama sırasında tetiklenmeleri gerekiyorsa, tüm samanlıklar. $digest döngüsü, $evalAsync kuyruğunu ve $watch listesini işleyen iki küçük döngüden oluşur. $evalAsync kuyruğu, geçerli yığın çerçevesinin dışında, ancak tarayıcının görünümü oluşturulmadan önce gerçekleşmesi gereken işleri zamanlamak için kullanılır. Bu genellikle setTimeout(0) ile yapılır. Bu süre zarfında uyarınız soruna neden oluyor.

+0

Bu kesinlikle sorun ama uyarı kullanmanın ötesinde bir çözüm var mı? – RAC

+0

Bloke olmayan uyarıları kullanın (model). modalınızı çağırmak için window.alert'i geçersiz kılabilirsiniz. Modal uyarıları da stilleyebilir ve yerel uyarılardan daha iyi görünebilir. – TheSharpieOne

10

Sindirim döngüsü tamamlandıktan sonra bir uyarı yürütmek için $ timeout kullanabilir ve bu şekilde bu hata önlenir.

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

Ayrıca her iki durumda da yanlış senin direktifi

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

Dönüş içine $ zaman aşımı enjekte etmeyi unutmayın.

-2

@ TheSharpieOne haklı, Benim için çalışıyor. Sorunun başka yerde durmalıdır - Bu kod ile yanlış bir şey yok

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

İlgili konular