javascript - 当 ng-options 的值和标签相等时出现错误?

标签 javascript angularjs angularjs-directive angularjs-ng-options angularjs-watch

如果我在 $scope.$watch 语句中设置 ng-options,我会遇到问题。

以下作品: <select ... ng-options="x.val as x.id for x in options"></select>

但这不是: <select ... ng-options="x.val as x.val for x in options"></select>

Plunker showing my issue -- click 'update options'

似乎如果模型的值在选项之前设置,并且标签和值是等价的,模型将不会匹配任何可用的选项。

这是一个错误,还是我做错了什么?

示例 Controller 代码:

$scope.myModel = 'Two';
$scope.$watch('loadTrigger', function(newValue, oldValue) {

    if (newValue == oldValue) { return; }

    $scope.options = [{id: 1, text: 'One'}, {id: 2, text: 'Two'}...];
})

示例 View :

<select ng-model="myModel" ng-options="x.text as x.text for x in options">...</select>

当 watch 触发并且选项得到更新时,选择将显示空白或默认选项,而不是预期的“两个”。但是,如果标签和值不同(甚至有一点不同),一切都会按预期进行

最佳答案

这是 Angular 如何将选定选项与绑定(bind)模型相关联的(对我而言)模糊区域之一。

简而言之,添加track by(而不是使用select as)可以解决这个问题:

<select ng-model="textLabel" 
        ng-options="x.text for x in dynamicOptions track by x.text">
   <option value="">[No Value]</option>
</select>

编辑:前段时间我发现了这个 issue在 Angular 的 github 上进行了讨论,没有 track by 的方法适用于 1.2.x Angular -> 因此是模糊的部分

关于javascript - 当 ng-options 的值和标签相等时出现错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27970971/

相关文章:

javascript - 在 chrome.tabs.executeScript 中使用 background.js 变量

javascript - 包含 ui-bootstrap 时 $modalStackProvider 的未知提供者

jquery - 如何使用 angular4 在组件标签中设置粗体和斜体属性

javascript - 我可以将变量 Controller 函数传递给指令中的函数链接吗?

javascript - Angular Directive(指令)不适用于值的更改

Javascript/jQuery - 将项目推送到数组和从数组中删除

javascript - dwr addoptions 与关联数组

javascript - future 时间的接载预估 Uber API

javascript - 如何根据类型将 Array 分成两部分 - Angular JS

javascript - 浏览器链接不起作用 VS 2013 Ultimate - 似乎 SignalR 不起作用?