2014-11-25 75 views
1

我有以下指令:獲取父指令控制器子指令

angular.module('test').directive('childDirective', [function() { 
    return { 
     restrict: 'E', 
     require: '^parentDirective', 
     controller: function() { 
      // How do I get parentDirective's controller? 
     }, 
     link: function($scope, $element, $attrs, $controller) { 
      var data = $controller.parentDirectiveData; 
      .... 
      .... 
     } 
    }; 
}]); 

在鏈接功能我得到保存到parentDirective的控制器參考$控制器的依賴。我如何在childDirective的控制器中獲得該參考?

回答

2

你有幾個選項,你可以把它的範圍,或者其存儲在一個變量,該控制器還可以訪問:

angular.module('test').directive('childDirective', [function() { 

    var parentCtrl; 

    return { 
     restrict: 'E', 
     require: '^parentDirective', 
     controller: function() { 
      // parentCtrl will be defined after the link function runs. 
     }, 
     link: function($scope, $element, $attrs, $controller) { 
      var data = $controller.parentDirectiveData; 
      parentCtrl = $controller 
     } 
    }; 
}]); 

重要請注意控制功能之前運行鏈接功能,讓你真的只能使用在異步回調。

沒有辦法注入母公司的控制的情況下進入此之前,孩子控制器,因爲它依賴於指令被綁定到的範圍,以便進行定義的層次結構。

+0

我正在尋找一個「官方」的答案,但是這似乎是一個解決辦法。 – Naor 2014-11-25 10:18:26

+3

請注意最後一段。控制器就像任何其他控制器一樣,使用角度的依賴注入將注入引用注入到其中。噴油器如何知道注入的母指令的控制器的情況下(記得有每個指令實例之一),如果你還沒有束縛孩子指令的範圍,但(發生在連接功能,並定義了**的**指令的父項)。換句話說,官方的答案是「做指令來指導鏈接功能中的通信」。 – 2014-11-25 10:58:20

+0

明白了。事情是,我與controllerAs語法的工作,並沒有linkAs ... – Naor 2014-11-25 11:56:18