当我将其名称作为字符串

时间:2016-06-29 08:25:47

标签: javascript angularjs

在我的AngularJS控制器中,我有一个接收参数的事件处理程序。参数的方法名称为string,我需要执行它。如何在控制器中调用该方法?

我已经看过这个question & answer,但它在控制器上对我不起作用。这是我的代码

事件由指令创建,该指令是确认对话框。用户单击“是”时将触发事件。

app.directive('yesNoModal', function() {
  return {
    restrict: 'E',
    scope: {
        yesNoData: '=',
    },
    controller: function($scope) {
        $scope.handleYes = function() {
            $scope.$emit('clickedYes', { "yesNoData": $scope.yesNoData  });
        }
        $scope.handleNo = function() {
            $scope.$emit('clickedNo');
        }
    },
    templateUrl: 'partials/templates/yes-no-modal.html',
  }
})

事件处理程序

$scope.$on('clickedYes', function(event, arg) {
    console.log(arg)
    window[arg.yesNoData.yesMethod]()
});
在我的情况下,

window[arg.yesNoData.yesMethod]会返回undefined。我也试过了$window,但我也得到了相同的定义。名称为arg.yesNoData.yesMethod变量的函数在控制器中定义为方法,并且在加载模态之前设置yesNoData的值。在模式中单击是,处理事件

function deleteRequirement() {
    console.log("In delete requirement")
}

1 个答案:

答案 0 :(得分:1)

使用$scope[arg.yesNoData.yesMethod]()代替window[arg.yesNoData.yesMethod](),因为它是$scope对象内的方法,而不是window对象