Can't açısal gelen enjektör al
Bu iki modül ile uygulama var:
angular.module('components', []).directive('foo', function () { return {};});
angular.module('gaad', ['components']);
Yönergeler, burada ... dahil değilim bu modülleri ile ilgili bir sürü var.
Uygulama gayet iyi çalışıyor. gaad
modülü için enjektör almak için çalışıyorum, ancak:
var injector = angular.injector(['gaad', 'components']); //called after 'gaad' module initialization
hata atılır:
Uncaught Error: Unknown provider: $compileProvider from components
Uygulama oldukça, hiçbir fikrim yok hatalar için bakmak gerekir. Benim sorum ise şu:Sorunlarımın nedeni ne olabilir?
DÜZENLEME: Benim sorunum çoğaltmak başardı: http://jsfiddle.net/selbh/ehmnt/11/
CEVAP
Bu soruyu cevaplamadan önce olduğuna dikkat etmeliyiztek başına enjektör uygulama örneği ve modül başına değil. Bu anlamda Olası modül başına bir enjektör almak mümkün değildir. Eğer üst düzey modülü alırsak tabii ki, tüm uygulama temsil eder. Bu anlamda, uygulama ve üst düzey bir modül eşdeğer gibi görünüyor. İnce bir fark gibi görünüyor olabilir ama önemli olan tam ve düzgün bir şekilde bu soruya cevap vermek için anlamak önemlidir.
Sonraki, anladığım kadarıylaalmak$injector
ve yeni bir örneğini oluşturun. Şey angular.injector
modüller (bir uygulama) ** 10 yeni bir örneğini bağımsız değişken olarak belirtilen yaratacak. Burada ana AngularJS modülü (ng) açıkça belirtilmesi gerekir. Yani, bu kodu örnek:
var injector = angular.injector(['gaad', 'components']);
bileşenleri 'gaad' ve 'bileşenleri' modülleri ve $compileProvider
belli ki özel modüllerde tanımlı değil. tanımlanan yeni bir enjektör oluşturmak için çalışıyordunListeye ng
modül ekleme"," yeni bir enjektör oluşturarak . sorunu çözmek istiyorsunuz - muhtemelen olmasını istemediğiniz bir şey.
Aslında enjektör bir örneğini çalıştıran bir uygulama ile ilişkili almak için2 yöntem kullanabiliriz:
- AngularJS içinde en basit çözüm sadece
$injector
örnek enjekte etmektir JavaScript: http://docs.angularjs.org/api/angular.injector - AngularJS dünyanın dışından - [DOM element]
ng-app
tanımlanmış kubbe unsuru olduğuangular.element([DOM element]).injector()
çağrı (ya da bu elemanın herhangi bir çocuk element). Burada daha fazla bilgi: http://docs.angularjs.org/api/angular.element
İşte jsFiddle enjektör alımı 2 yöntem gösteren: http://jsfiddle.net/xaQzb/
Ayrıca doğrudan $injector
kullanarak birim testler dışında çok yaygın bir senaryo olduğunu unutmayın lütfen. AngularJS dünya dışından alınıyor AngularJS hizmetleri için düşünce yararlı olabilir. Burada daha fazla bilgi: Call Angular JS from legacy code.
"Yakalanmamış Hata: [$] enjektör:...
Ng-model varsayılan değerler açısal js...
Açısal döner test hizmeti tanımlanmamı...
Açısal, nasıl yönlendirmek $yere.$http...
Açısal JS-tekrar ng boş liste davayı i...