2016-05-16 142 views
1

ngChange directive要求ngModel存在,但直接綁定到我的控制器中的字段很困難,因爲邏輯稍微複雜一點。如何在沒有ng模型的情況下使用ng-change

我有一個調查問卷,其中包含從數據庫中檢索的問題。每個問題可以有一個答案已經和我可以檢索與對調查方法的調用被查看:

vm.survey.GetCurrentAnswerIDForQuestionID(q.ID)

更新時,這是困難的,因爲如果答案ISN直接綁定到屬性目前我需要創建一個實體來存儲它,如果它存在,那麼我改變它或刪除它(當用戶選擇空選項時)。

所以我覺得我需要調用一個方法。就像這樣:

vm.survey.SetCurrentAnswerIDForQuestionID(q.ID, answerid)

我可以使用這個標記顯示正確的選擇列表:

<select ng-init="answerid = vm.survey.GetCurrentAnswerIDForQuestionID(q.ID)"> 
    <option value=""></option> 
    <option ng-repeat="va in q.ValidAnswers | orderBy:'SortOrder'" 
      ng-selected="va.AnswerID === q.currentAnswer" 
      value="{{va.AnswerID}}"> 
    {{va.Text}} 
    </option> 
</select> 

現在我想調用一個方法來設置的答案,當用戶更改答案。事情是這樣的:

 <select 
      ng-init="answerid = vm.survey.GetCurrentAnswerIDForQuestionID(q.ID)" 
      ng-model="answerid" 
      ng-change="vm.survey.SetCurrentAnswerIDForQuestionID(q.ID, answerid)"> 
...etc 

但是,這並不工作 - 正確的項目不再被選中,當我查看該頁面

+0

該模型在加載時或選擇後不正確? – tymeJV

回答

2

您應該使用ngOptions獲得綁定正常工作:

<select 
    ng-init="answerid = vm.survey.GetCurrentAnswerIDForQuestionID(q.ID)" 
    ng-model="answerid" 
    ng-change="vm.survey.SetCurrentAnswerIDForQuestionID(q.ID, answerid)" 
    ng-options="va.AnswerID as va.Text for va in q.ValidAnswers" 
></select> 
+0

我假設我的問題是我沒有被允許使用'ng-init'作爲我的模型初始化變量 - 這不是事實,這是可行的 – Colin