Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度,从控制器中的控制器触发函数_Javascript_Angularjs - Fatal编程技术网

Javascript 角度,从控制器中的控制器触发函数

Javascript 角度,从控制器中的控制器触发函数,javascript,angularjs,Javascript,Angularjs,所以我知道你可以在指令中得到一个函数来启动控制器中的一个函数(请参见:),但是,现在我正在尝试实现一些稍微不同的东西 我试图让控制器中的函数激发指令中控制器中的函数(在指令中处理)。因此,我单击指令外部控制器中的按钮,它在指令内部触发一个函数 这是我试过的 该指令: return { restrict: 'A', replace: true, controller: EditorCtrl.componentName,

所以我知道你可以在指令中得到一个函数来启动控制器中的一个函数(请参见:),但是,现在我正在尝试实现一些稍微不同的东西

我试图让控制器中的函数激发指令中控制器中的函数(在指令中处理)。因此,我单击指令外部控制器中的按钮,它在指令内部触发一个函数

这是我试过的

该指令:

return {
            restrict: 'A',
            replace: true,
            controller: EditorCtrl.componentName,
            scope: {
                content: '=',
                requestNow: '@'
            },
            templateUrl: 'editor.html'
        };
正在使用的指令:

  <div cengage-file-editor content="XmlContent" request-now="changeXml()"></div>
指令控制器内的功能:

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

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

因此,基本上,我希望用户已经启动了changeXml函数(在指令之外),并将其发送到指令中,然后连接并启动其中的一个函数。不知道如何做到这一点,希望得到一些帮助。谢谢

您必须注意控制器上存在的某些东西,以触发指令控制器中的函数

html代码:

外部控制器的功能:

  $scope.changeXml = function(){
     //fire function inside directive controller?
       };
$scope.changeXml = function(){
  $scope.somethingChanged = true;
};
在指令的控制器中:

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

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

指令应该是自包含的,所以我认为这不是一个好的指令用例。相反,您可以创建一个执行所需功能的服务,并将此服务注入两个控制器中,而不是尝试向上传递,尝试从父控制器向下传递到控制器。因此,在指令外有一个函数,当我按下时,我希望它在指令内激发一些东西。如果是这种情况,你必须监视指令内的一个对象,该对象从控制器中的函数内更改,现在编辑我的答案。指令具有隔离作用域,它怎么能看“somethingChanged”如果你看一看提问者的定义,他/她正在将一个名为
content
的东西绑定到指令
content:'='
的范围,如果他将本地定义的“content”绑定到控制器范围中定义的东西,那么他/她就可以看了。指令可以有独立的作用域,但在本问题中并非如此。