Açısal JavaScript Kodunda nasıl hata ayıklanır


104

Angular JavaScript kullanarak bir kavram kanıtı üzerinde çalışıyorum.

Angular JavaScript kodu farklı tarayıcılarda (Firefox ve Chrome) nasıl hata ayıklanır?


13
uh angularjs şablon kodunuzun çoğunu sarar ve dinamik olarak yürütür ... hatanın kaynağı her zaman "angular.js" dir, bu nedenle bir hatanın kaynağını bulmak neredeyse imkansızdır.
user3338098

Yanıtlar:


64

1. Chrome

Hata Ayıklama AngularJS in chrome için AngularJS Batarang kullanabilirsiniz . (Eklenti üzerinde yapılan son incelemelerden, AngularJS Batarang'ın artık bakımının yapılmadığı görülüyor. Chrome'un çeşitli sürümlerinde test edildiğinde çalışmıyor)

İşte açıklama ve Demo için Bağlantı:

Angular JS Batarang'a Giriş

Chrome eklentisini buradan indirin: hata ayıklama için krom eklentisi AngularJS

Bu bağlantıya da başvurabilirsiniz: ng-book: AngularJS Hata Ayıklama

Açısal hata ayıklama için ng-inspect'i de kullanabilirsiniz.

2. Firefox

For Firefox yardımıyla Firebug kodu hata.

Ayrıca bu Firefox Eklentilerini kullanın: AngScope: Firefox için Eklentiler (AngularJS Ekibinin resmi uzantısı değil)

3. AngularJS'de Hata Ayıklama : Bağlantıyı Kontrol Edin: AngularJS'de Hata Ayıklama


1
gerçekten işe yaramaması utanç verici. Adamın bir şeyi korumaya başlamasını isterdim çünkü bu harika bir fikir ve çok fazla potansiyele sahip
Tules

5
@AskQuestion Görünüşe göre Batarang artık desteklenmiyor. Bu cevap kaldırılmalıdır
Aakil Fernandes

Angular ekibi (çoğunlukla @btford) Batarang'ı hala destekliyor, ancak hepsi bir sonraki AngularJS 2.0 sürümünde kafa olduğu için kendi listelerinde bir öncelik gibi görünmüyor. ng-inspectBatarang'ın size baş ağrısı yapıp yapmadığına bakın .
demisx

Batarang'ın düzgün çalıştığını varsayarsak, konsoldaki angular.js hatalarına ek bağlam eklenmez ve 'AngularJS' sekmesi de yardımcı olmaz.
user3338098

1
@SazzadTusharKhan: tamam. Bunu deneyin -> mac sürümünde bir Geliştirici menüsüne sahipsiniz ("Geliştirme"), mac'da bu menü tercihler> gelişmiş> geliştirmeyi göster menüsü aracılığıyla gösterilir ve burada "JavaScript hata ayıklamayı başlat" gibi öğeleri görüntüleyebilirsiniz. Referans için: youtube.com/watch?v=BUvsnDhFL2w
Vaibhav Jain

35

IMHO, en sinir bozucu deneyim, görsel bir öğeyle ilgili belirli bir kapsamın değerini almaktan / belirlemekten gelir. Sadece kendi kodumda değil, aynı zamanda angular.js'de de çok sayıda kesme noktası yaptım, ancak bazen bu en etkili yol olmuyor. Aşağıdaki yöntemler çok güçlü olsa da, gerçekten üretim kodunda kullanıyorsanız kesinlikle kötü uygulama olarak kabul edilir, bu yüzden onları akıllıca kullanın!

Konsolda görsel bir öğeden referans alın

IE olmayan tarayıcıların çoğunda, bir öğeyi sağ tıklayıp "Öğeyi İncele" yi tıklayarak bir öğeyi seçebilirsiniz. Alternatif olarak, örneğin Chrome'daki Öğeler sekmesindeki herhangi bir öğeyi de tıklayabilirsiniz. En son seçilen öğe, $0konsolda değişken olarak saklanacaktır .

Bir öğeye bağlı bir kapsam alın

İzolasyon kapsamı oluşturan bir yönerge olup olmadığına bağlı olarak kapsamı angular.element($0).scope()veya ile alabilirsiniz angular.element($0).isolateScope()( $($0).scope()$ etkinse kullanın ). Batarang'ın en son sürümünü kullandığınızda tam olarak elde ettiğiniz şey budur. Değeri doğrudan değiştiriyorsanız scope.$digest(), değişiklikleri kullanıcı arayüzünde yansıtmak için kullanmayı unutmayın .

$ eval kötüdür

Hata ayıklama için gerekli değildir. scope.$eval(expression)bir ifadenin beklenen değere sahip olup olmadığını hızlıca kontrol etmek istediğinizde çok kullanışlıdır.

Kapsamın eksik prototip üyeleri

Arasındaki fark scope.blave scope.$eval('bla')prototip miras değerlerini dikkate almaz eski olduğunu. Resmin tamamını görmek için aşağıdaki pasajı kullanın (değeri doğrudan değiştiremezsiniz, ancak $evalyine de kullanabilirsiniz !)

scopeCopy = function (scope) {
    var a = {}; 
    for (x in scope){ 
        if (scope.hasOwnProperty(x) && 
            x.substring(0,1) !== '$' && 
            x !== 'this') {
            a[x] = angular.copy(scope[x])
        }
    }
    return a
};

scopeEval = function (scope) {
    if (scope.$parent === null) {
        return hoho(scope)
    } else {
        return angular.extend({}, haha(scope.$parent), hoho(scope))
    }
};

İle kullanın scopeEval($($0).scope()).

Denetleyicim nerede?

Bazen ngModelbir direktif yazarken değerleri izlemek isteyebilirsiniz . Kullanım $($0).controller('ngModel')ve denetlemek alacak $formatters, $parsers, $modelValue, $viewValue $renderve her şeyi.





7

Maalesef eklentilerin ve tarayıcı uzantılarının çoğu yalnızca değerleri size gösteriyor ancak kapsam değişkenlerini düzenlemenize veya açısal işlevleri çalıştırmanıza izin vermiyorlar. Tarayıcı konsolunda (tüm tarayıcılarda) $ kapsam değişkenlerini değiştirmek istiyorsanız jquery'yi kullanabilirsiniz. JQuery'yi AngularJS'den önce yüklerseniz, angular.element bir jQuery seçicisine geçilebilir. Böylece bir kontrolörün kapsamını inceleyebilirsiniz.

angular.element('[ng-controller="name of your controller"]').scope()

Örnek: $ kapsam değişkeninin değerini değiştirmeniz ve sonucu tarayıcıda görmeniz ve ardından tarayıcı konsolunu yazmanız yeterlidir:

angular.element('[ng-controller="mycontroller"]').scope().var1 = "New Value";
angular.element('[ng-controller="mycontroller"]').scope().$apply();

Tarayıcınızda değişiklikleri anında görebilirsiniz. $ Apply () kullanmamızın nedeni şudur: dış açısal bağlamdan güncellenen herhangi bir kapsam değişkeni, bağlamayı güncellemeyecektir, kullanarak kapsamın değerlerini güncelledikten sonra özet döngüsünü çalıştırmanız gerekir scope.$apply().

Bir $ kapsam değişken değerini gözlemlemek için, o değişkeni çağırmanız yeterlidir.

Örnek: Chrome veya Firefox'ta web konsolunda $ kapsam.var1 değerini görmek istiyorsanız şunu yazın:

angular.element('[ng-controller="mycontroller"]').scope().var1;

Sonuç hemen konsolda gösterilecektir.


5

Kullanmak istediğiniz debuggeryere çağrı ekleyin .

someFunction(){
  debugger;
}

In consoletarayıcınızın web geliştirici araçları sekmesi, konuylaangular.reloadWithDebugInfo();

Hata ayıklamayı düşündüğünüz sayfayı ziyaret edin veya yeniden yükleyin ve hata ayıklayıcının tarayıcınızda göründüğünü görün.


Bu, bazı nedenlerden dolayı bileşenlerin içinde gerçekten işe yaramıyor gibi görünüyor. Konsol, bileşenin oluşturulduğu noktada kesme noktasını buluyor gibi görünüyor, ancak gerçekte çalıştırılan kodu görüntülemez. En azından benim için değil. ancak kapsam olan değişkenlerin değerini görüntüleyebilirsiniz. Eğer hata ayıklayıcının tavsiyeyle aşılanan gerçek kodu göstermesini bilen biri takdir edilecektir.
user1023110

3
var rootEle = document.querySelector("html");
var ele = angular.element(rootEle); 

kapsam () $ kapsamını öğeden (veya üst öğesinden), öğe üzerindeki kapsam () yöntemini kullanarak getirebiliriz:

var scope = ele.scope();

enjektör()

var injector = ele.injector();

Bu enjektörle, daha sonra uygulamamızın içindeki hizmetler, diğer denetleyiciler veya başka herhangi bir nesne gibi herhangi bir Angular nesneyi somutlaştırabiliriz.


Teşekkürler. Tam ihtiyacım olan şey!
marlar

2

Kodunuza 'hata ayıklayıcı' ekleyebilir ve uygulamayı yeniden yükleyebilirsiniz, bu da kesme noktasını oraya koyar ve 'adım atabilir' veya çalıştırabilirsiniz.

var service = {
user_id: null,
getCurrentUser: function() {
  debugger; // Set the debugger inside 
            // this function
  return service.user_id;
}

2

Geliştirici araçlarında yerleşik tarayıcıları kullanarak hata ayıklayabilirsiniz.

  1. geliştirici araçlarını tarayıcıda açın ve kaynak sekmesine gidin.

  2. Ctrl + P kullanarak hata ayıklamak istediğiniz dosyayı açın ve dosya adını arayın

  3. kodun sol tarafına tıklayarak bir satıra kesme noktası ekleyin.

  4. sayfayı yenile.

Hata ayıklama için kullanılabilecek birçok eklenti var, "Chrome için Hata Ayıklayıcı" eklentisini kullanarak krom eklentisi Debug Angular Application'ı kullanmak için başvurabilirsiniz


1

Visual Studio Code için (Visual Studio Değil) do Ctrl+ Shift+P

Arama çubuğuna Chrome için Hata Ayıklayıcı yazın, kurun ve etkinleştirin.

Sizin de launch.jsondosyaya bu yapılandırma ekleyin:

{
    "version": "0.1.0",
    "configurations": [
        {
            "name": "Launch localhost with sourcemaps",
            "type": "chrome",
            "request": "launch",
            "url": "http://localhost/mypage.html",
            "webRoot": "${workspaceRoot}/app/files",
            "sourceMaps": true
        },
        {
            "name": "Launch index.html (without sourcemaps)",
            "type": "chrome",
            "request": "launch",
            "file": "${workspaceRoot}/index.html"
        },
    ]
}

Uzantının eklenmesi için Chrome'u uzaktan hata ayıklama etkin olarak başlatmanız gerekir.

  • pencereler

Chrome kısayoluna sağ tıklayın ve özellikleri seçin "target" alanında --remote-debugging-port = 9222 ekleyin Veya bir komut isteminde /chrome.exe --remote-debugging-port = 9222 komutunu çalıştırın

  • OS X

Bir terminalde / Applications / Google \ Chrome.app/Contents/MacOS/Google \ Chrome --remote-debugging-port = 9222 komutunu yürütün.

  • Linux

Bir terminalde google-chrome --remote-debugging-port = 9222'yi başlatın

Daha Fazlasını Bul ===>


0

Eklentiler artık çalışmadığından, bulduğum en yararlı araç seti Visual Studio / IE kullanmaktır çünkü JS'nizde kesme noktaları ayarlayabilir ve verilerinizi bu şekilde inceleyebilirsiniz. Elbette Chrome ve Firefox'un genel olarak çok daha iyi geliştirme araçları var. Ayrıca, iyi ol 'console.log () çok yardımcı oldu!


0

Belki Angular 2 ve üzeri uygulamalarda hata ayıklamak için Angular Augury A Google Chrome Geliştirici Araçları uzantısını kullanabilirsiniz .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.