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

Jer*_*uff 10 javascript angularjs angularjs-injector

您好我正在尝试手动引导角度应用程序,但有一些业务需要首先处理.文章中提到我感兴趣的技术.

当我注入这个:

 var $injector = angular.injector(["ng"]);
 var $http = $injector.get("$http");
Run Code Online (Sandbox Code Playgroud)

它工作正常,但这:

var $injector= angular.injector(["ng", "myApp"]);
var $location = $injector.get("$location");
Run Code Online (Sandbox Code Playgroud)

引发以下错误.

Uncaught Error: [$injector:unpr] Unknown provider: $rootElementProvider <- $rootElement <- $location <- $location
Run Code Online (Sandbox Code Playgroud)

是否有可能在angular.bootstrap之前获得$ location?

万分感谢!

PSL*_*PSL 12

为了获得$location引导之前,你基本上需要提供$rootElement.一种方法是模拟它:注入ngMock模块angular-mocks以获得注入器.

var $injector= angular.injector(['ng','ngMock',"plunker"]);
var $location = $injector.get("$location");
Run Code Online (Sandbox Code Playgroud)

Plunker

或者通过创建一个模拟应用程序并在获取注入器时包含它来自己提供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");
Run Code Online (Sandbox Code Playgroud)

Plunker

或者其他方式(基于您的可行性)是使用window.location从窗口获取位置.

另外值得注意的是github上的这个帖子