Javascript 未知提供程序:$rootElementProvider在angular.bootstrap之前使用$injector获取$location服务时

Javascript 未知提供程序:$rootElementProvider在angular.bootstrap之前使用$injector获取$location服务时,javascript,angularjs,angularjs-injector,Javascript,Angularjs,Angularjs Injector,您好,我正在尝试手动引导一个angular应用程序,但有一些业务需要首先处理。这篇文章提到了我感兴趣的技术 当我注入这个时: var $injector = angular.injector(["ng"]); var $http = $injector.get("$http"); 它工作正常,但这: var $injector= angular.injector(["ng", "myApp"]); var $location = $injector.get("$location"); 抛

您好,我正在尝试手动引导一个angular应用程序,但有一些业务需要首先处理。这篇文章提到了我感兴趣的技术

当我注入这个时:

 var $injector = angular.injector(["ng"]);
 var $http = $injector.get("$http");
它工作正常,但这:

var $injector= angular.injector(["ng", "myApp"]);
var $location = $injector.get("$location");
抛出以下错误

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

Uncaught错误:[$injector:unpr]未知提供程序:$rootElementProvider为了在引导之前获取
$location
,您基本上需要提供
$rootElement
。一种方法是模拟它:从
角度模拟中注入
ngMock
模块以获得注入器

var $injector= angular.injector(['ng','ngMock',"plunker"]);
var $location = $injector.get("$location");
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");

或者通过创建一个模拟应用程序并在获取注入器时包含它来提供自己的rootElement

var $injector= angular.injector(['ng','ngMock',"plunker"]);
var $location = $injector.get("$location");
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");
var mockApp=angular.module('mockApp',[]).provider({
$rootElement:function(){
这是。$get=function(){
返回角度元素(“”);
};
}
});
var$injector=angular.injector(['ng','mockApp','plunker']);
var$location=$injector.get(“$location”);

或者其他方法(根据您的可行性)是使用从窗口获取位置


还值得注意的是,根元素上的此线程必须插入到文档中。 看


这确实回答了我的问题,但并没有解决我的问题。我需要location的一个功能是.search方法,当以这种方式注入location时,location似乎处于一种奇怪的状态,并且对象返回为空。为什么不使用window.location.search呢?你的最终目标是什么?我就是这么做的。我们的应用程序中有一些工厂位于Inect$位置,我们需要它们的功能预引导。我试图通过使用这些服务来避免代码重复。