2015-09-02 54 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

相關問題