嵌套ng-include的角度问题

时间:2013-12-04 21:57:07

标签: javascript angularjs

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

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

我想,我必须在编译流程的某处注入$rootElementProvider,但我不知道如何。

以下是我的问题:http://plnkr.co/edit/K8iayGXGLx5QwHNNiLZ1?p=preview

需要所有代码,我不能使用指令和控制器,模板也需要像这样缓存。 此外,如果有人也知道如何摆脱$timeout服务以通过已经运行的$digest,我将非常感激。

1 个答案:

答案 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
}

有关详细信息,请参阅链接的答案。