ngChange
directive需要ngModel
,但是直接绑定到控制器中的字段很困难,因为逻辑稍微复杂一些。
我的调查问卷包含从数据库中检索到的问题。每个问题都可能已经有了答案,我可以通过调用正在查看的调查方法来检索该问题:
vm.survey.GetCurrentAnswerIDForQuestionID(q.ID)
更新时,很难直接绑定到属性,因为如果答案不存在,我需要创建一个实体来存储它,如果它存在,那么我改变它或删除它(当用户选择空选项。
所以我认为我需要调用一个方法。像这样:
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 :(得分:4)
您应该使用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>