ng-model从下拉列表中获取错误的值

时间:2015-10-07 18:05:29

标签: javascript angularjs drop-down-menu angular-ngmodel

当某些值SHARE在字幕处开始字母时,我在输入下拉列表时使用第一个值更新我的ng模型。

 <div ng-app="dropDown" ng-controller="dropDownController">
      <select name="StateId" ng-model="selectedState" class="form-control" ng-change="selectedStateChanged()" ng-options="(states.Abbrev + ' - ' + states.Name) for states in states"></select>
      <span>{{selectedState.Name||''}}</span>
    </div>

Plnkr http://plnkr.co/edit/pLVzK18iJxrmrL9Oiw4b?p=preview

测试方案:

  1. 点击表单的任何部分。
  2. 点击标签以关注下拉列表。
  3. 开始输入&#39; TX&#39;
  4. 结果:   - &#39; TX - TEXAS&#39; drowpdown上显示选项。   - $ scope.selectedState值IS {Name:&#39; TENNESSEE&#39;}

    预期:

    • &#39; TX - TEXAS&#39;选项显示在drowpdown上。
    • $ scope.selectedState值应为{Name:&#39; TEXAS&#39;}

    我会通过使用普通的javascript来解决这个问题,与此同时,我想知道是否有任何AngularJS解决方案。

    提前致谢。

1 个答案:

答案 0 :(得分:4)

select我也遇到了一些问题。这就是为什么添加一个空的option - 标签总是更安全!

<div ng-app="dropDown" ng-controller="dropDownController">
  <select name="StateId" ng-model="selectedState" class="form-control" ng-change="selectedStateChanged()" ng-options="(states.Abbrev + ' - ' + states.Name) for states in states">
    <option></option>
  </select>
  <span>{{selectedState.Name||''}}</span>
</div>

解决方案:http://plnkr.co/edit/LfS347JM6V7Rv5S6vPkL?p=preview

Angular Documentation解释了问题:

  

如果ngModel的viewValue与任何选项都不匹配,则控件将自动添加“未知”选项,然后在解决不匹配时将其删除。

     

可选地,单个硬编码元素(其值设置为空字符串)可以嵌套到元素中。然后,此元素将表示null或“未选中”选项。