İlk biraz açıklama: Eğer küresel bir işlev veya module.controller(...)
yöntemin argüman olarak kullanarak bir denetleyici olarak deklare etmeleri
bağımlılık enjeksiyon için, hiç önemli değil. Bağımlılık enjektörü sadece işlevin kendisi ile ilgilidir. Yani ne aslında yaklaşık soruyorsun o ikisinin denklik geçerli:
// First
function MyController($scope) {}
MyController.$inject = [ '$scope '];
// Second
function($scope) {}
Ve denetleyici işlevi enjektör için önemli değil, aynı zamanda anonim olup olmadığını, yukarıdaki iki gibi iyi olabilir, çünkü:
// First
function MyController($scope) {}
MyController.$inject = [ '$scope '];
// Second
function MyController($scope) {}
Şimdi sıra iki denetleyicileri arasındaki tek fark bunlardan birinde $inject
mülkiyetin varlığı olduğu açıktır.
Ve burada sorunuzun asıl cevap bu:
Bu iki kontrolörleri neredeyse aynıdır. Her ikisi de argüman olarak $scope
alır ve aynı işlevi görür. Ancak, kodunuzu daha sonra küçültmeye karar verirseniz, yalnızca $inject
dizisi üzerinde ayarlanmış olan sürüm düzgün şekilde çalışacaktır. Bunun nedeni, $inject
dizisini belirtmezseniz veya satır içi açıklamalama yaklaşımını (http://docs.angularjs.org/guide/di#inlineannotation) kullanmazsanız, enjektörün ilgilendiğiniz bağımlılıkları bulmasının tek yolu işlev argümanlarınızın adlarını kontrol etmektir (servis kimlikleri). Ancak kıymetlendirme, bu argümanları rasgele olarak adlandırır ve böylece bağımlılıkları bu şekilde algılama şansını ortadan kaldırır.
Kodunuzu küçültecekseniz, bağımlıları $inject
dizisini veya satır içi ek açıklamasını kullanarak açıkça belirtmeniz gerekir, aksi halde, herhangi bir sürüm de iyi çalışır. Eğer module.controller
yöntemi kullanmaya gidiyoruz
Teşekkürler ama bu, $ http ile çalışmak gibi görünmüyor ... burada bunun hakkında soruldu: http://stackoverflow.com/q/16664325 – user2283066