2014-07-08 58 views
0

我有一个指令,我希望它使用不同的templateUrl:,具体取决于它是否被parentDirective包装。孩子的link:函数的第四个参数(父控制器)似乎是确定是否有父控制器的地方,因为require: ?^parentDirective返回null如果找不到父项,但我似乎无法弄清楚如何翻译这到templateUrl的选择。我对$compile的理解是,我可以使用templateUrl: function(),但我似乎无法使其工作。也许我有范围问题。确定子指令是否嵌套在父指令中

link: function(scope, element, attributes, parentCtrl) { 
    ... 
    scope.wrapped = function() { 
      return parentCtrl ? true : false; 
     } 
} 
+0

如果检查elem.parent()(或它的父母)有父指令是什么?您只能访问链接函数中的'?^ parentDirective'对象,但您需要知道在链接运行之前,templateUrl函数 – JoseM

+1

请检查http://plnkr.co/edit/sAvsycXavbJ5er1xdQYy?p=preview – JoseM

+0

@JoseM非常好(做作和简单)的例子。感谢那。我也会玩另一个选项,看看我想出了什么。我认为DOM的递归爬行不会太重。 –

回答

1

感谢您的所有输入。这是我最终做的。该模板是动态的,并根据parentCtrl是否在链接函数中定义来配置它自己。

指令:

... 
templateUrl: 'path/to/template.html', 
link: function(scope, element, attributes, parentCtrl) { 
    if (parentCtrl) { 
     scope.wrapped = true; 
    } else { 
     scope.wrapped = false; 
    } 
} 
... 

模板:

<div ng-if="!wrapped" ng-click="someAction()">Do Action</div>