未知提供者:在 angular.bootstrap 之前使用 $injector 获取 $location 服务时的 $rootElementProvider
Unknown provider: $rootElementProvider when using $injector to get $location service before angular.bootstrap
您好,我正在尝试手动 bootstrap 一个 angular 应用程序,但是有一些业务需要先处理。This 文章提到了我感兴趣的技术英寸
当我注入时:
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
是否可以在 angular.bootstrap 之前获取 $location?
非常感谢!
为了在引导之前获得 $location
,您基本上需要提供 $rootElement
。一种方法是模拟它:从 angular-mocks
注入 ngMock
模块以获得注入器。
var $injector= angular.injector(['ng','ngMock',"plunker"]);
var $location = $injector.get("$location");
或者通过创建模拟应用程序并在获取注入器时包含它来自行提供 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");
或其他方式(根据您的可行性)是使用 window.location 从 window 获取位置。
同样值得注意的是 github
上的这个话题
根元素必须插入到文档中。
参见 http://plnkr.co/edit/OrgStgw4NpjU2LcIFXsB
var rootElement = angular.element(document);
var mockApp = angular.module('mockApp', []).provider({
$rootElement:function() {
this.$get = function() {
return rootElement;
};
}
});
您好,我正在尝试手动 bootstrap 一个 angular 应用程序,但是有一些业务需要先处理。This 文章提到了我感兴趣的技术英寸
当我注入时:
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
是否可以在 angular.bootstrap 之前获取 $location?
非常感谢!
为了在引导之前获得 $location
,您基本上需要提供 $rootElement
。一种方法是模拟它:从 angular-mocks
注入 ngMock
模块以获得注入器。
var $injector= angular.injector(['ng','ngMock',"plunker"]);
var $location = $injector.get("$location");
或者通过创建模拟应用程序并在获取注入器时包含它来自行提供 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");
或其他方式(根据您的可行性)是使用 window.location 从 window 获取位置。
同样值得注意的是 github
上的这个话题根元素必须插入到文档中。 参见 http://plnkr.co/edit/OrgStgw4NpjU2LcIFXsB
var rootElement = angular.element(document);
var mockApp = angular.module('mockApp', []).provider({
$rootElement:function() {
this.$get = function() {
return rootElement;
};
}
});