2017-04-26 22 views
4

我正在爲我的大學項目創建一個小應用程序,我有一個場景,當用戶單擊單選按鈕時應該觸發一個事件。單擊列表中的每個單選按鈕後,ng-change不會觸發

我的角度代碼塊:

<div ng-repeat="q in questionList " ng-if="ExamOver == false"> 
     <h2>{{count+1}} .{{q.questionText}}</h2> 
     <ul> 
      <li ng-repeat="d in q.Choices"> 
       <input type="radio" name="isCorrect" ng-model="correctAnswer.isworking" ng-change="getDetails($index,d,correctAnswer.isCorrect);" value="Yes" /> 
       {{d.choiceText}} 
      </li> 
    </ul> 
</div> 

在我的控制,我有這樣的代碼:

$scope.correctAnswer = {isCorrect : false}; 

$scope.getDetails = function (index, choiceList, isCorrect) {  
    /* some logic... */ 
} 

事件被解僱,每個按鈕只有一次,我試圖解決這個過去幾個小時沒有任何進展,有人可以請指導我在這裏做錯了什麼?

+0

因爲它是相同的'值= 「是」' –

+0

親切改變'NG-change'爲'NG-click' –

回答

1

ngChange如果ngModel的值發生變化,將被觸發。

你的單選按鈕都具有即相同的值「是」時,您(ng-model)綁定變量的值改變

<input type="radio" name="isCorrect" ng-model="..." ng-change="..." value="Yes" > 
+0

我的要求是請使用'NG-value',而不是'value' –

7

ng-change將被解僱。在這裏,所有的單選按鈕都有相同的value="Yes"。這就是爲什麼ng-change沒有被觸發的原因。從docs

當用戶更改輸入時評估給定的表達式。與JavaScript onchange 事件不同,該事件僅在更改結束時觸發(通常,當用戶離開表單元素或按下返回鍵時),纔會立即評估表達式。

很好的解決方案取決於您的需求,但其中有一些想法:

解決方案1 ​​

設置不同的值,請輸入:

<li ng-repeat="d in q.Choices"> 
    <input type="radio" 
      name="isCorrect" 
      ng-model="correctAnswer.isworking" 
      ng-change="getDetails($index, d, correctAnswer.isCorrect)" 
      ng-value="$index" /> 
    {{d.choiceText}} 
</li> 

解決方案2

點擊收音機時觸發您的功能:

ng-click="getDetails($index, d, correctAnswer.isCorrect)" 
+0

解決方案2將一個更好的+ 1' –

+0

@Ramesh是的,我想也是。但是,我們需要更多的信息來確定什麼是最好的imo。例如,我很確定'getDetails'函數中有太多參數,我們可以刪除1-2來簡化它。 – Mistalis

+0

是的。我們可以從我們想要做的'd'參數中獲得所有的東西。 –

相關問題