我有一个我想作为参数发出的函数。
我尝试了以下内容:
$scope.$watchGroup(['watch1', 'watch2'], function(newValues, oldValues, scope) {
if (scope.1 && scope.2) {
$scope.$emit('enableButton', {$scope.submit(true)});
}
});
其中$ scope.submit(true)是我在当前控制器中定义的函数。
然后在我的另一个控制器中:
$scope.$on('enableButton', function(event, data) {
$scope.buttonAction = data;
});
当我尝试为$ scope.buttonAction分配作为参数传递的函数时,该函数只在$ emit发生时自动触发。为什么会这样?
答案 0 :(得分:2)
因为您正在使用参数和参数传递函数调用,所以在您尝试在事件中传递函数时,将执行函数调用。您应该将引用传递给函数。
$scope.$emit('enableButton', $scope.submit);
如果需要保留参数,可以将函数调用包装在匿名函数中并传递该函数。这与通过引用传递不同,通常用于回调参数:
$scope.$emit('enableButton', function() { return $scope.submit(true); });
这里需要注意的是,如果在调用$scope.buttonAction
之前使用变量来表示true并且变量发生变化,则传递的值也会发生变化。
您可以使用.bind()
保留变量的上下文,在现代浏览器中解决此问题。
$scope.$emit('enableButton', $scope.submit.bind(this, isSubmittable));