2014-02-11 43 views
10

我有一個表單,我想在輸入ng-checked="someFunction()"中使用函數,我不知道這是可能的,或者我做錯了什麼。我在我的控制器中有功能,我正在調用它。至於函數,我認爲它肯定是有效的,而ng-checked會觸發它,但是返回true或false並不會改變任何東西。所以問題是有沒有辦法在'ng-checked'中使用函數?AngularJs ng檢查使用函數

$scope.multiAnswers = function (answers, optionId) { 
     angular.forEach(answers, function (answer, key) { 
      if (answer.option_choice_id == optionId) { 
       return true; 
      } 
     }); 

     return false; 
    }; 
+1

Afaik ng-checked僅用於模型的開/關值。所以你可以改爲利用模型。 – Whisher

回答

16

ng-checked確實與函數一起工作。這裏是一個演示:

$scope.getCheckedFalse = function(){ 
    return false; 
}; 

$scope.getCheckedTrue = function(){ 
    return true; 
}; 

HTML:

<input type="checkbox" ng-checked="getCheckedFalse()"/> 
<input type="checkbox" ng-checked="getCheckedTrue()"/> 

DEMO

你的問題是,你永遠不會回報真正函數的結束。 return true;裏面angular.forEach沒有幫助。

嘗試:

$scope.multiAnswers = function (answers, optionId) { 
    var returnValue = false; 
    angular.forEach(answers, function (answer, key) { 
     if (answer.option_choice_id == optionId) { 
       returnValue = true; 
       return; 
     } 
    }); 

    return returnValue; 
}; 

看起來,我們不能從angular.forEach突破:Angular JS break ForEach

爲了提高性能,立即打破時answer.option_choice_id == optionId。你可以試試jQuery $.each或使用vanilar javascript(for循環)。

3

你需要做的是使用狀態變量作爲ng-checked表達,如:ng-checked="someValue"。然後,在您的代碼中的其他位置更新$scope值。問題是,通過使用函數,它實際上不應該更新它的值。

+0

它在範圍內。對不起,我稍後將'this'對象傳遞給範圍。代碼中不明顯。 – sarunast

+0

感謝您的解釋。我有類似的想法,問題是我無法使用該變量,因爲表單是動態的。有沒有其他的方法?使用過濾器可能? – sarunast

+0

您需要詳細說明。你能創造一個小提琴嗎? –