AngularJS-在父控制器中调用的子指令中声明的函数

时间:2019-01-07 10:48:12

标签: angularjs

父控制器上调用在 child指令中声明的函数。

父控制器HTML

<div ng-click="testFunction()"></div>

父控制器js

  $scope.testFunction = function(){
    $scope.functionFromChildDirective()
  }

子指令js

function TestDirective() {

    return {
      restrict: 'EA',
      scope: {
      },  
      templateUrl: '',
      controller: function($scope) {
        "ngInject";

        $scope.functionFromChildDirective = function(){
          console.log("TEST")
        }

      }
    }
  }

  export default {
    name: 'testDirective',
    fn: TestDirective
  };

2 个答案:

答案 0 :(得分:1)

只需删除空作用域减速度,就可以通过定义它来创建新的隔离作用域。如果不在指令定义对象中声明作用域,它将仅继承父作用域。但是,使用这种方法时,子指令只能使用一次(即不能重复使用),因为的每个实例都将覆盖$ scope.functionFromChildDirective属性。

答案 1 :(得分:1)

使用ng-ref directive将控制器绑定到父变量:

<test-directive ng-ref="testAPI">
</test-directive>
function TestDirective() {

    return {
      restrict: 'EA',
      scope: {
      },  
      templateUrl: '',
      controller: function() {
        this.testFn = function(){
          console.log("TEST")
        }

      }
    }
  }

调用它:

<div ng-click="testAPI.testFn()"></div>

ngRef指令告诉AngularJS将组件(或指令)的控制器分配给当前作用域中的给定属性。

有关更多信息,请参见AngularJS ng-ref Directive API Reference