AngularJS ng-click:如何使用函数作为参数调用函数?

时间:2014-12-05 09:49:57

标签: javascript angularjs

我想编写一个确认框函数(打开一个模态),在ng-click指令中调用。

在这个确认模式中,我有两个按钮:取消+确定。 单击取消将取消模式。 单击Ok必须通过我的ng-click-call(带参数)调用(回调)函数:

<button ng-click="confirmBox('beSureQuestion', functionToCallWhenOkClicked(parameter))">Delete</button>

有没有办法在ng-click中提供函数作为参数?

我不想在我的html模板中使用if语句。

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

不,你可以按照自己的方式去做。问题是ngClick会同时执行两个函数functionToCallWhenOkClicked(parameter)confirmBox因为您使用()立即调用它们。

然而,你可以做的是传递这样的函数引用:

<button ng-click="confirmBox('beSureQuestion', functionToCallWhenOkClicked)">Delete</button>

他们在需要时从控制器调用它:

$scope.confirmBox = function(msg, okCallback) {
    // some checks ...
    okCallback();
}

UPD。来自@Marcel Ennix的评论。为了能够传递其他参数,最好将一个参数传递给confirmBox函数:

ng-click="confirmBox('beSureQuestion', functionToCallWhenOkClicked, {para1:value1, para2, value2})"

答案 1 :(得分:1)

由于JavaScript是一种函数式编程语言,因此变量和函数之间实际上没有差异。变量只是一个返回其值的简单函数。因此,要将函数用作参数,只需将函数添加到视图中,方法是将其添加到角度控制器中的$scope

$scope.myCallback = function(anyParameter) {
    //do some stuff
    return "some stuff" + anyParameter;
}

$scope.anyFunction = function(value,callback,parameter) {
    //do something with value
    ...
    //do the callback
    callback(parameter);
}

现在您可以在模板中传递此回调函数:

<div ng-click="anyFunction(someValue, myCallback, someParameter)">