如何为ng Include设置父范围

时间:2014-01-08 10:00:04

标签: angularjs angularjs-directive angularjs-scope

我有一个指令需要一个孤立的工作范围 它接收的参数之一是传递给ng-include

的templateUrl

有没有办法告诉ng-include将其范围生成为调用我的指令的父范围的子范围? (与ng-transclude相同的事情 - 除了我已经在内部使用transclude,我需要一个额外的模板。

您可以查看当前指令https://github.com/lee-elenbaas/angular-multiline-ellipsis omsisUrl将被转换为

将变得更加可用

1 个答案:

答案 0 :(得分:4)

所以基本上,你想要的是从隔离范围中排除指令模板的一部分,并将其转换回父范围。

我会使用指令

.directive('excludeFromIsolated', function() {
  return {
    restrict: "E",
    transclude: true,
    link: function (scope, elm, attr, ctrl, $transclude) {
      $transclude(scope.$parent), function(clone){
        elm.replaceWith(clone);
      });
    }
  }
})

在您的模板中,使用新指令包含ngInclude的元素:

+ '<exclude-from-isolated>'
  + '<span ng-include="ellipsis" ng-style="ellipsisStyle"></span>'
+ '</exclude-from-isolated>'

考虑

  • 我考虑过使用scope.$parent.$new(),但由于ngInclude无论如何都会创建一个新的范围,所以它毫无意义。
  • ngInlcude已使用翻译
  • Angular不允许在同一个元素上进行重复转换(除非你使用你可能不应该使用的$$ tlb),所以我不得不用一个元素包装它。