如何在指令中声明的AngularJS控制器中调用函数?

时间:2018-07-08 18:10:25

标签: angularjs

我是AngularJS的新手,我试图调用在指令内声明的doSomething()函数。请帮助我。

这是我的指令:

app.directive('myDirective', function() {
    return {
        scope.doSomething = function(parm1, param2) {
        console.log('print This');
    }
});

这是我的控制者:

function MyCtrl($scope) {
    $rootScope.$broadcast('doSomething', [parm1,'parm2']);
}

1 个答案:

答案 0 :(得分:0)

您可以通过使用angularjs $broadcast/$on事件来解决此问题。 基本上,您通过广播某些组件将监听的事件进行通信。

为此,请在指令中添加一个事件侦听器,该侦听器将侦听ID为“ doSomething”的事件。

app.directive('myDirective', function () {

    var controller = ['$scope', function ($scope) {

          $scope.$on('doSomething', function(e){
                doSomething(e.parm1, e.parm2)
            });
          };

          $scope.doSomething = function(parm1, param2) {
             console.log('print This');
          }
      }],

      template = '<h4>I will listen on your event</h4>

      return {
          controller: controller,
          template: template
      };
  });

然后使用您要发送的对象从控制器中广播'doSomething'事件

function MyCtrl($scope) {
    var obj = { 'parm1': parm1, 'parm2':parm2 };
    $scope.$broadcast('doSomething', obj);
}

(请注意,该指令必须在控制器范围内声明,否则请使用rootscope,但要避免这种情况)