2016-05-16 143 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