2015-02-08 10 views
9

Witam Próbuję ręcznie uruchomić aplikację kątową, ale jest pewna firma, którą należy najpierw załatwić. This artykuł wymienia technikę jestem zainteresowany

kiedy wstrzykiwać.

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

to działa dobrze, ale w ten sposób:

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

Zgłasza się następujący błąd.

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

Czy możliwe jest uzyskanie $ location przed ustawieniem kątowym.bootstrap?

Dziękuję za tonę!

Odpowiedz

12

Aby uzyskać dostęp do $location przed bootstrapiem, konieczne jest podanie $rootElement. Jednym ze sposobów jest naśmiewać się z niego: należy wprowadzić moduł ngMock z angular-mocks, aby uzyskać wtryskiwacz.

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

Plunker

Albo rootElement dostaw na własną rękę poprzez stworzenie makiety aplikację i tym, że przy pobieraniu wtryskiwacza.

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"); 

Plunker

Albo inny sposób (na podstawie swojej wykonalności) jest uzyskanie lokalizację z okna przy użyciu window.location.

Warto również zauważyć, ten gwint github

+0

To jest odpowiedź na moje pytanie, ale nie rozwiąże mój problem. Jedną z rzeczy, których potrzebowałem z lokalizacji, była metoda .search, a lokalizacja wydaje się być w stanie nieparzystym po wstrzyknięciu w ten sposób, a obiekt jest zwracany pusty. – Jeremythuff

+0

Dlaczego po prostu nie używam window.location.search? Jaki jest ostateczny cel. – PSL

+0

Skończyło się na tym. W naszej aplikacji jest kilka fabryk, które pozycjonują $ location i potrzebowaliśmy ich funkcji przed bootstrapem. Próbowałem uniknąć duplikowania kodu przy użyciu tych usług. – Jeremythuff

2

elementu głównego musi być włożony w dokumencie. Zobacz http://plnkr.co/edit/OrgStgw4NpjU2LcIFXsB

var rootElement = angular.element(document); 

var mockApp = angular.module('mockApp', []).provider({ 
    $rootElement:function() { 
    this.$get = function() { 
     return rootElement; 
    }; 
    } 
}); 
Powiązane problemy