2015-02-08 18 views
9

Merhaba Ben bir açısal uygulamayı elle bootstrap çalışıyorum, ama ilk dikkat edilmesi gereken bazı iş var. This makale İlgileniyorum tekniği bahseder

bu enjekte ettiğimde:.

var $injector = angular.injector(["ng"]); 
var $http = $injector.get("$http"); 

iyi çalışıyor, ama bu:

var $injector= angular.injector(["ng", "myApp"]); 
var $location = $injector.get("$location"); 

aşağıdaki hatayı atar.

Uncaught Error: [$injector:unpr] Unknown provider: $rootElementProvider <- $rootElement <- $location <- $location 

Angular.bootstrap'ten önce $ konumu almak mümkün mü?

Teşekkürler bir ton!

cevap

12

Önyüklemeden önce $location'u almak için, temel olarak $rootElement'u sağlamanız gerekir. Bunu yapmanın bir yolu şudur: enjektörü almak için angular-mocks'dan ngMock modülünü enjekte edin.

var $injector= angular.injector(['ng','ngMock',"plunker"]); 
var $location = $injector.get("$location"); 

Plunker

Ya sahte bir uygulama oluştururken ve enjektörü elde ederken o dahil ederek kendi başınıza tedarik rootElement.

var mockApp = angular.module('mockApp', []).provider({ 
    $rootElement:function() { 
    this.$get = function() { 
     return angular.element('<div ng-app></div>'); 
    }; 
    } 
}); 

var $injector= angular.injector(['ng','mockApp',"plunker"]); 

var $location = $injector.get("$location"); 
(sizin fizibilite çalışmalarına göre)

Plunker

Veya başka bir yol window.location kullanarak penceresinden yerini elde etmektir.

Ayrıca değerli github

+0

Bu soruma cevap vermez, ama benim sorunu çözmek vermedi bakın. Konumdan ihtiyaç duyduğum şeylerden biri .search yöntemiydi ve konum bu şekilde enjekte edildiğinde garip bir durumda görünüyor ve nesne boş döndürülüyor. – Jeremythuff

+0

Neden window.location.search? Nihai amaç nedir? – PSL

+0

Sadece bunu yaptım. Bizim app innect $ konumu bazı fabrikalar var ve biz onların işlevselliği ön-bootstrap gerekiyordu. Bu servisleri kullanarak kod kopyalamaktan kaçınmaya çalışıyordum. – Jeremythuff

2

kök elemanı üzerinde Konuyu belirterek doküman takılı olmalıdır. http://plnkr.co/edit/OrgStgw4NpjU2LcIFXsB

var rootElement = angular.element(document); 

var mockApp = angular.module('mockApp', []).provider({ 
    $rootElement:function() { 
    this.$get = function() { 
     return rootElement; 
    }; 
    } 
}); 
İlgili konular