2014-07-08 81 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>