2013-07-03 13 views
5

AngularJS'den konsol günlüğü mesajını engellemek ve sayfadaki bir div içinde görüntülemek istiyorum. PhoneGap uygulamasında ajax trafiğini ayıklamak için buna ihtiyacım var.

Bu

ben yakalamak istediğiniz hataların tür bir örnektir:

enter image description here

Bu Showing console errors and alerts in a div inside the page çalıştı ama o Açısal hata iletileri müdahale etmez.

Ayrıca cevaplarda önerilen çözüm önerisini denedim. Bununla da hayır şansı. Görünüşe göre, $ http farklı bir şekilde günlüğe kaydetme hatası ele alıyor.

cevap

0

Bu amaçla log4javascript kullanıyorum. I

var log = log4javascript.getLogger('myApp') 
log.addAppender(new log4javascript.InPageAppender()); 

ile günlük nesnesi sonra bir value bağımlılık bu kullanım, ve (örneğin, http önleme) gerektiği yerde içine kanca oluşturur.

Daha hafif bir yaklaşım, $rootScope.emit kullanmak ve sonra ana sayfanızda bu günlük iletilerini görünür bir div için önceden ekleyen bir bileşene sahip olabilir, ancak bu tüm çağrılarınızı console.log'a değiştirmenizi gerektirir (veya yeniden tanımlamanız gerekir. js'nizde işlev).

+0

Bu, günlük kaydı gereksinimleriniz için harika bir çözüm gibi görünüyor. Ama bu benim soruma cevap vermiyor. AngularJS'nin kendisini const.log dosyasına döktüğü hata mesajını yakalamak istiyorum. –

1

Denediğiniz yanıtın doğru fikre sahip olduğunu sanıyorum, ancak yanlış yöntemleri geçersiz kılıyorsunuz. Reading here AngularJs, console.log yerine $log'u kullandığını görebiliyorum, bu nedenle, engellemek için bunları geçersiz kılmaya çalışın. Böyle

şey:

$scope.$log = { 
     error: function(msg){document.getElementById("logger").innerHTML(msg)}, 
     info: function(msg){document.getElementById("logger").innerHTML(msg)}, 
     log: function(msg){document.getElementById("logger").innerHTML(msg)}, 
     warn: function(msg){document.getElementById("logger").innerHTML(msg)} 
    } 

angular.js ithal bundan sonra çalıştırmak için emin olun.

DÜZENLEME

İkinci tahminim, angular.js dosya üzerinde LogProvider iç sınıfına consoleLog yöntemini geçersiz:

function consoleLog(type) { 
    var output =""; 
    //arguments array, you'll need to change this accordingly if you want to 
    //log arrays, objects etc      
    forEach(arguments, function(arg) { 
    output+= arg +" "; 
    }); 
    document.getElementById("logger").innerHTML(output);    
} 
+0

Evet bunu da okudum. Ama sorun "bir şey gibi". Uygulamanın .'run' yönteminde '$ log 'enjekte etmeyi denedim. Ama bu çalışmıyor. –

+0

js dosyasında biraz daha fazla zaman geçirdim, bunu yapmalı! – caiocpricci2

+0

Umut verici görünüyor! Ben '$ log' enjekte ederek ve 'error' geçersiz kılarak çalışmayı başardı. Ancak: 'http: '' konsoluna yazılan hatalar (ekran görüntüsüne bakın) bu şekilde engellenmez. –

0

Bu mesajı bile angularjs görüntülenen olmadığını düşünüyorum. Herhangi bir JavaScript'te yakalanmayan bir istisna gibi görünüyor (angular.js yığınının üstünde görünür, çünkü bu, HTTP isteğinin gönderildiği gerçek konumdur).

ng.$exceptionHandler'a bakın. Bu, ilginizi çekmiş gibi görünen kod olmalıdır. Aksi takdirde, bu tür hataları nasıl izleyeceğinizi anlatan "JavaScript onerror" için hızlı bir web araması yapın.

0

$ http interceptor'u kullanmayı tercih ederim. responseError işlevinin içinde, div kapsamına maruz kalacak bir hizmette bir özellik ayarlayabilirsiniz.