2015-06-30 65 views
0

我有一個使用另一種指令一個指令:如何等待子指令呈現?

<div style="border:2px solid black;height:150px;padding:10px"> 
    <my-internal-directive></my-internal-directive> 
    <my-internal-directive></my-internal-directive> 
    <my-internal-directive></my-internal-directive> 
</div> 

內部指令:

<h2>foo</h2> 

內部指令控制器:

internalDirectiveModule.directive('myInternalDirective', function($document){ 
    return { 
     restrict:'E', 
     scope: {}, 
     //templateUrl: 'myInternalDirective.html', // EXTERNAL directive render first 
     template: '<h2>foo</h2>',      // INTERNAL directive render first 
     link: function(scope, element){ 
     $document.find('body').append('<h1>internal directive\n'); 
     } 
    }; 
}); 

問題是,當我使用templateUrl用於內部指令首先呈現外部指令,但當我使用template時 - 內部指令首先呈現。內部渲染後,我必須從內部指令的內部指令中獲取數據(調用link方法),但由於我僅使用templateUrl,因此無法達到此行爲。我如何從父親的方法link中的renderred子指令中獲取數據?

DEMO

+0

你能詳細說明你想要達到的目標嗎?這對我來說似乎是一個奇怪的用例。 – Icycool

回答

0

您可以嘗試幾件事情:

  1. 設置內部指令的優先級比外部指令的優先級。
  2. 消防這樣的超時後外部指令的鏈接功能:

    鏈接:函數(){$超時(linkFn,1000,FALSE); }

更新: 下面是用於設置優先級的示例:

angular.module('abc').directive('xyz', directive); 

    directive.$inject = ['$timeout']; 

    function directive($timeout) { 

      return { 
        restrict: 'A', 
        priority: 100, 
        link: function ($scope, $element) { 
+0

好的。感謝您的回答,但如何設置優先級? – dyatchenko

+0

在指令定義中,您可以像這樣指定:priority:100 –

+0

恐怕只有'priority'只能用於屬性指令。 – dyatchenko

0

至於說通過Sidharth &阿倫,你可以設置優先級,或者在正常的方式,如果它不是強制性的,以有這樣的範圍:{}在你的代碼比你可以很容易地使用兩個做在指令中進行雙向數據綁定。 https://docs.angularjs.org/guide/directive