2014-09-15 59 views
5

Bir tarayıcı uygulaması yazıyorum ve bir nesne oluşturan ve onu başlatan bir dosyam var. Uygulama AngularJS'de yazılmıştır, ancak söz konusu dosya Angular ekosistemi dışında düz Javascript.

Bu dosyadaki vaatleri kullanmak istiyorum, ancak Angular an implementationQ içerdiğinden, bunu yalnızca başka bir kitaplık getirmekten ziyade kullanmayı tercih ediyorum.

Ayrıca RequireJS'yi kullanıyorum.

Yani, Açısal olmayan bir dosyada $ q kullanmanın bir yolu var mı?

+0

Neden neden görmediğimi - sadece uygun zamanda geçirin. –

cevap

9

Bunu invoke() yöntemiyle ihtiyacınız bağımlılıkları (örneğin $http, $q) enjekte edilebilir bir $injector işlevini döndürür angular.injector() yöntemini kullanarak bunu yapabilirsiniz. Böyle

DEMO

şey: angularjs çekirdek bağımlılıkları neresinde olduğunu çünkü angular.injector() geçirilen dizi modüllerinin bir listesi olduğunu

angular.injector(['ng']).invoke(['$q', function($q) { 

    $q.when('hello world').then(function(message) { 
    window.alert(message); 
    }); 

}]); 

Not, ben ng modülü dahil .

+0

Ama bu şekilde, '' $ q'', uygulamanın geri kalanı olarak farklı bir '' $ rootScope'' kullanacak. Bu nedenle, '' $ rootScope. $ Apply() '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' q'' için kullanılmaz, doğru değil – Ignitor

+0

@Ignitor. Bu mutlaka doğru değildir, 'ng' modülü teknik olarak tüm modüller için bir bağımlılık olarak eklenir. Bu nedenle, oluşturduğunuz modül için '$ rootScope'' ng' modülünün '$ rootScope'unu da paylaşır. Bu yorumun yazılmasından itibaren, angular.js sürümü 1.5.8'dir, 'ng' modülünün önyükleme işlemindeki tüm modüller için varsayılan modül olarak eklendiğini göreceksiniz, [** bu satırda **] (https://github.com/angular/angular.js/blob/v1.5.8/src/Angular.js#L1688). Ayrıca, yerel angularjs hizmetleri, sağlayıcıları, fabrikaları ve değerleri bu modülde bulunur. – ryeballar

+0

Sadece denedim: Bir denetleyicideki '' $ rootScope'' için bir referans kaydettim ve bunu '' $ rootScope'' ile karşılaştırdım: '' angular.injector (['ng']) .invoke (['$ rootScope', işlev ($ rootScope) { console.dir ($ rootScope); }]). * Eşleşmezler * ve hatta farklı '' $ id''ler vardır. – Ignitor

İlgili konular