angularjs - 如何在没有 ng-model 的情况下对 select 使用 ng-change

标签 angularjs

ngChange directive需要 ngModel 存在,但是直接绑定(bind)到我的 Controller 中的字段很困难,因为逻辑有点复杂。

我有一份调查问卷,其中包含从数据库中检索到的问题。每个问题可能已经有了答案,我可以通过调用正在查看的调查中的方法来检索答案:

vm.survey.GetCurrentAnswerIDForQuestionID(q.ID)

更新时,很难直接绑定(bind)到属性,因为如果答案不存在,我需要创建一个实体来存储它,如果它存在,那么我更改它或删除它(当用户选择空选项)。

所以我认为我需要调用一个方法。像这样:

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

但这不起作用 - 当我查看页面时不再选择正确的项目

最佳答案

您应该使用 ngOptions 让绑定(bind)正常工作:

<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>

关于angularjs - 如何在没有 ng-model 的情况下对 select 使用 ng-change,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37254370/

相关文章:

javascript - AngularJS 1.x 依赖验证

javascript - 如何在 for 循环中执行请求?

javascript - Angular 1.5 组件与旧指令 - 链接函数在哪里?

javascript - 使用 ng-repeat 将按不同类别排序的所有项目打印到行中

javascript - 从两个 http req 获取数据并将它们组合起来

javascript - 无法将 attrs.value 移交给 Directive 的 templateUrl 函数

angularjs - 如何添加丢失的外键/实体?使用 JObjects 保存 BreezeJs

angularjs - John Papa angularjs 风格指南 webstorm 实时模板

angularjs - 使用 ui-router 和 ocLazyLoad 加载 Controller 并为其设置部分

javascript - ng-if 中的 AngularJS 日期比较