2015-09-02 52 views
0

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

我曾尝试以下:

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

其中$ scope.submit(真)是我在电流控制器中定义的函数。

然后在我的另一个控制器:

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

当我尝试分配$ scope.buttonAction这是通过作为参数传递的函数,该函数在$ EMIT刚刚发生自动闪光。为什么会发生?

+1

您是否没有收到意外的令牌错误? '{$ scope.submit(true)}'是无效的对象语法。 – doldt

+0

做'如果(scope.1 && scope.2)'是有史以来可能..?变量名称不应以数字 –

回答

2

因为你传递一个函数调用的参数而params,函数调用执行你试图将它传递事件的时刻。你应该通过一个参考的函数。

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

如果您需要保留的说法,你可以用你的函数调用的匿名函数和传递功能。这比通过引用传递不同,通常用于回调参数:

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

这里需要说明的是,如果你使用一个变量来表示真实,$scope.buttonAction之前变量的变化被调用时,值传递也将改变。

您可以通过使用.bind()保存您的变量的情况下解决这一在现代浏览器。

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

开头正是我在找的东西。非常感谢你。本质上,我已经分配了一个按钮,但它不起作用,因为(true)不存在。如果这有什么不同,它是ng-repeat的一部分。是否有可能在父控制器中传递它(真)? – developthewebz

+0

@JordanMcRae乐于帮助。我已经更新了我的答案,以包含保存参数的方法。 –

+0

非常感谢您花时间更新您的答案。这正是我正在寻找的。 – developthewebz

相关问题