2017-05-26 33 views
0

我想立即調用它的函數,然後在事件(單擊)上傳遞參數。以後在我的代碼中調用IIFE的問題

該代碼片段直到我將函數($ scope.appFunctions.testBtn)作爲一個iife。

  • 這是因爲匿名函數的作用域現在是對象而不是變量?
  • 我該如何解決這個問題?

查看片段

<button type="button" ng-click="appFunctions.testBtn('filterStr')">testBtn</button> 

控制器摘錄

$scope.appFunctions.testBtn = (function(filterStr){ 
    alert("testBtn Clicked"); 
})(); 

回答

3

現在在你的代碼,$scope.appFunctions.testBtn是函數執行的結果,是至極undefined。此undefined傳遞給ng-click指令。這樣做會不會更容易?

$scope.appFunctions.testBtn = function (filterStr) {/*...*/} 
$scope.appFunctions.testBtn(); 

在綁定它後立即調用它,它將適用於ng-click

+0

謝謝!我立即寫了這個問題,我考慮編寫一個後續的「加載程序」生成函數來調用需要立即執行的其他函數。從你的迴應中,這將是不必要的代碼。謝謝! – Oxossi

+0

@imoses檢查答案由Yury Tarabanko,它可能會滿足您的要求。 –

+0

明白了,謝謝!出於好奇,使用上述模式是否有任何「顯而易見」的好處?可以讓我控制初始執行的時間? (例如,確保首先加載依賴函數) – Oxossi

1

如果您的原始函數不返回任何內容,您可以從IIFE返回相同的函數。

$scope.appFunctions.testBtn = (function testBtn(filterStr){ 
    alert("testBtn Clicked"); 
    return testBtn; 
})(); 
2

在你的情況下,函數不返回任何如此不確定的將被分配到$ scope.appFunctions.testBtn。這就是爲什麼稍後調用時會失敗。

我會刪除iife,並在聲明它後調用該函數。