Bu soruna neden olan yeri kaynak kodumuzda nasıl bulabileceğimi hâlâ öğrenmek isterdim, ancak o zamandan beri sorunu manuel olarak bulabildim.
.controller()
Uygulama modülünde bir çağrı kullanmak yerine genel kapsamda bildirilen bir denetleyici işlevi vardı .
Yani şöyle bir şey vardı:
function SomeController( $scope, i18n ) { /* ... */ }
Bu, AngularJS için gayet iyi çalışıyor, ancak karıştırmayla doğru çalışmasını sağlamak için şu şekilde değiştirmem gerekiyordu:
var applicationModule = angular.module( "example" );
function SomeController( $scope, i18n ) { /* ... */ }
applicationModule.controller( "SomeController", [ "$scope", "i18n", SomeController ] );
Daha ileri testlerden sonra, aslında sorunlara da neden olan daha fazla denetleyicinin örneklerini buldum. Hepsinin kaynağını manuel olarak bu şekilde buldum :
Her şeyden önce, çirkinleştirme seçeneklerinde çıktı güzelleştirmeyi etkinleştirmenin oldukça önemli olduğunu düşünüyorum. Homurdanan görevimiz için:
options : {
beautify : true,
mangle : true
}
Daha sonra proje web sitesini Chrome'da DevTools açık olarak açtım. Bu, aşağıdaki gibi bir hatanın günlüğe kaydedilmesine neden olur:
Çağrı izlemede ilgilendiğimiz yöntem, okla işaretlediğim yöntemdir. Bu providerInjector
içindeinjector.js
. Bir istisna oluşturduğu bir kesme noktası yerleştirmek isteyeceksiniz:
Şimdi uygulamayı yeniden çalıştırdığınızda, kesme noktası vurulacak ve çağrı yığınını atlayabilirsiniz. Bir çağrı olacak invoke
içindeinjector.js
dize "belirteç Yanlış enjeksiyon" dan tanınabilir:
locals
Parametresi (hiç mangled d
benim kodunda) problemdir Kaynağınıza hangi nesne hakkında bir fikir verir:
grep
Kaynağımız üzerinden hızlı bir şekilde birçok örnek bulur modalInstance
, ancak oradan itibaren bu noktayı kaynakta bulmak kolaydı:
var ModalCreateEditMeetingController = function( $scope, $modalInstance ) {
};
Hangisi şu şekilde değiştirilmelidir:
var ModalCreateEditMeetingController = [ "$scope", "$modalInstance", function( $scope, $modalInstance ) {
} ];
Değişkenin yararlı bilgiler içermemesi durumunda, yığında daha da yukarı atlayabilirsiniz ve invoke
ek ipuçlarına sahip olması gereken bir çağrıya basmanız gerekir:
Bunun tekrar olmasını önleyin
Şimdi umarım sorunu bulduğunuza göre, bunun gelecekte tekrar olmasını en iyi nasıl önleyebileceğimi belirtmem gerektiğini hissediyorum.
Açıkçası, yalnızca satır içi dizi açıklamasını her yerde veya (tercihinize bağlı olarak) $inject
özellik açıklamasını kullanabilir ve gelecekte bunu unutmamaya çalışabilirsiniz. Bunu yaparsanız, bu gibi hataları erken yakalamak için sıkı bağımlılık ekleme modunu etkinleştirdiğinizden emin olun .
Dikkat et! Angular Batarang kullanıyorsanız, StrictDI sizin için çalışmayabilir, çünkü Angular Batarang sizin kodunuza açıklama yapılmamış kod enjekte eder (kötü Batarang!).
Veya ng-annotate'in ilgilenmesine izin verebilirsiniz . Bu alandaki birçok hata potansiyelini ortadan kaldırdığı için bunu yapmanızı şiddetle tavsiye ederim, örneğin:
- DI ek açıklaması eksik
- DI ek açıklaması eksik
- DI ek açıklaması yanlış sırada
Ek açıklamaları güncel tutmak sadece baş belasıdır ve otomatik olarak yapılabiliyorsa bunu yapmak zorunda kalmamalısınız. ng-annotate tam olarak bunu yapar.
Grunt-ng-annotate ve gulp-ng-annotate ile yapım sürecinize güzel bir şekilde entegre edilmelidir .