Angular中嵌套使用ng-include存在问题

6

在使用嵌套的ng-include$compile函数时,我在Angularjs中遇到了一个问题。以下是错误信息:

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

我认为,我需要在编译流程中的某个地方注入$rootElementProvider,但我不知道怎么做。
这是我的问题的Plunker链接:http://plnkr.co/edit/K8iayGXGLx5QwHNNiLZ1?p=preview 需要全部代码,并且不能使用指令或控制器,模板也需要像这样被缓存。此外,如果有人知道如何摆脱$timeout服务来通过已运行的$digest,我将非常感激。

你最终解决了这个问题吗? - Justin Niessner
你解决了你的问题吗?我处于相同的情况。 - RPDeshaies
1个回答

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的方法,可以在以下链接中找到详细答案:

当调用$scope.$apply()时,防止错误$digest already in progress

简而言之,你可以进行一个简单的检查(这并不意味着你应该这样做):

if(!$scope.$$phase) {
  //$digest or $apply
}

请参考链接答案以获取更多详细信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接