2015-04-01 91 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