gpt4 book ai didi

javascript - 发出函数作为参数

转载 作者:行者123 更新时间:2023-12-02 15:44:09 27 4
gpt4 key购买 nike

我有一个函数想要作为参数发出。

我尝试过以下方法:

$scope.$watchGroup(['watch1', 'watch2'], function(newValues, oldValues, scope) {
if (scope.1 && scope.2) {
$scope.$emit('enableButton', {$scope.submit(true)});
}
});

其中 $scope.submit(true) 是我在当前 Controller 中定义的函数。

然后在我的另一个 Controller 中:

$scope.$on('enableButton', function(event, data) {
$scope.buttonAction = data;
});

当我尝试将作为参数传递的函数分配给 $scope.buttonAction 时,该函数会在 $emit 发生时自动触发。为什么会出现这种情况?

最佳答案

因为您正在传递带有参数和参数的函数调用,所以函数调用将在您尝试在事件中传递它时执行。您应该将引用传递给该函数。

$scope.$emit('enableButton', $scope.submit);

如果需要保留参数,可以将函数调用包装在匿名函数中并传递该函数。这与通过引用传递不同,并且通常用于回调参数:

$scope.$emit('enableButton', function() { return $scope.submit(true); });

这里需要注意的是,如果您使用变量来表示 true,并且该变量在调用 $scope.buttonAction 之前发生变化,则传递的值也会发生变化。

您可以在现代浏览器中使用 .bind() 来保留变量的上下文来解决此问题。

$scope.$emit('enableButton', $scope.submit.bind(this, isSubmittable));

关于javascript - 发出函数作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32361422/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com