2015-04-01 99 views
0

所以我知道你可以在一個指令中獲得一個函數來觸發一個控制器中的函數(見:AngularJS - pass function to directive),然而,現在我正在嘗試稍微獲得一些東西不同。我試圖讓一個控制器中的函數激發指令中的控制器內的一個函數(在指令中處理)。所以我點擊指令外的控制器按鈕,它會在指令內激發一個函數。角度,從指令控制器中的控制器觸發一個功能

這是我曾嘗試

的指令:

<div cengage-file-editor content="XmlContent" request-now="changeXml()"></div> 

外部控制器的功能:

$scope.changeXml = function(){ 
    //fire function inside directive controller? 
     }; 

功能

return { 
      restrict: 'A', 
      replace: true, 
      controller: EditorCtrl.componentName, 
      scope: { 
       content: '=', 
       requestNow: '@' 
      }, 
      templateUrl: 'editor.html' 
     }; 

在使用該指令該指令控制器內:

$scope.changeXml = function(){ 
      console.log("hit"); 
      } 

所以基本上,我希望用戶已經打響了changeXml功能(指令之外),並把它發送到指令並連接和消防的功能在裏面。不知道如何做到這一點,會喜歡一些幫助。謝謝!

+1

指令應該是有些自包含的,所以我不認爲這是指令的一個很好的用例。相反,你可以創建一個服務來執行你需要的功能,並將這個服務注入到兩個控制器中。 – 2015-04-01 19:50:38

回答

-1

您必須注意控制器上存在的某些內容以觸發指令控制器中的功能。

的html代碼: <div cengage-file-editor content="XmlContent" changeXmlTrigger="somethingChanged"></div>

外部控制器的功能:

$scope.changeXml = function(){ 
    $scope.somethingChanged = true; 
}; 

在該指令的控制器:

$scope.$watch('somethingChanged', function(newVal, oldVal) { 
    if(newVal && newVal !== oldVal) { 
    $scope.changeXml(); 
    } 
}); 

$scope.changeXml = function(){ 
    console.log("hit"); 
} 
+0

不會試圖通過,試圖從父控制器傳遞到指令控制器。所以在指令之外有一個函數,當我按下時,我希望它在指令內引發一些東西。 – ajmajmajma 2015-04-01 20:00:00

+0

如果出現這種情況,您必須監視指令內部的一個對象,該對象從控制器中的函數中更改,現在編輯我的答案。 – 2015-04-01 20:02:29

+0

指令具有獨立範圍,它如何監視'somethingChanged' – 2015-04-20 02:51:04