【问题标题】:ng-model is getting wrong value from dropdownng-model 从下拉列表中获取错误值
【发布时间】:2015-10-07 18:05:28
【问题描述】:

当某些值在标题处共享开头字母时,在下拉菜单中键入时,我的 ng-model 会更新为第一个值。

 <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. 单击 Tab 以聚焦下拉菜单。
  3. 开始输入“TX”

结果: - 'TX - TEXAS' 选项显示在下拉菜单中。 - $scope.selectedState 值为 {Name:'TENNESSEE'}

预期:

  • “TX - TEXAS”选项显示在下拉菜单中。
  • $scope.selectedState 值应该是 {Name:'TEXAS'}

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

提前致谢。

【问题讨论】:

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


    【解决方案1】:

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

    <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 或“未选择”选项。

    【讨论】:

    • 你为我节省了很多时间。谢谢你。解决了所有奇怪的问题。
    • 与常规选择标签相比,使用此方法并在option 标签上使用ng-repeat 有什么优势吗?我以前也这样做过,它似乎工作得很好。我只在 Angular 工作了大约 2 个月,所以不同的做事方式引起了我的兴趣。
    • hmm 我觉得基本一样,不过我一直用ng-options
    • 文档蓝框中的@ragerory 是一个解释:docs.angularjs.org/api/ng/directive/select
    猜你喜欢
    • 1970-01-01
    • 2015-08-13
    • 2014-08-20
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 2018-09-08
    • 2017-01-03
    • 2014-06-19
    相关资源
    最近更新 更多