在使用带有ng-include
函数的嵌套$compile
时,我在Angularjs中遇到了一个问题。
这是错误:
Error: [$injector:unpr] Unknown provider: $rootElementProvider <- $rootElement <- $location <- $anchorScroll <- ngIncludeDirective
我想,我必须在编译流程的某处注入$rootElementProvider
,但我不知道如何。
以下是我的问题:http://plnkr.co/edit/K8iayGXGLx5QwHNNiLZ1?p=preview
需要所有代码,我不能使用指令和控制器,模板也需要像这样缓存。
此外,如果有人也知道如何摆脱$timeout
服务以通过已经运行的$digest
,我将非常感激。
答案 0 :(得分:0)
由于您手动创建$injector
,因此您需要以某种方式告诉它从哪里获取$rootElement
。一种方法是通过内联模块定义:
angular.injector(['ng', function($provide){
var $rootElement = angular.element(document.querySelector('body'));
$provide.value('$rootElement', $rootElement);
}]).invoke(function ($injector){
var localRootElement = $injector.get('$rootElement');
});
我已相应更新了您的plunker。
至于避免使用$timeout
的方法,可在以下网址找到详细答案:
Prevent error $digest already in progress when calling $scope.$apply()。
简而言之,你可以做一个简单的检查(这并不意味着你应该):
if(!$scope.$$phase) {
//$digest or $apply
}
有关详细信息,请参阅链接的答案。