【发布时间】:2017-09-07 15:32:00
【问题描述】:
我在将下拉值与关联数组绑定时遇到问题。
问题在于 track by 所以就像当我不将 track by 添加到我的下拉列表时我与下拉列表绑定并且当我添加 track 时 O 无法自动选择下拉值。
我想通过 ng-options 使用 track by,这样 angular js 就不会添加 $$hashKey 并利用与跟踪依据相关的性能优势。
我不明白为什么会发生这种行为。
注意:我只想为我的每个 $scope.items 而不是整个对象绑定 选择名称,例如 Pizza 或 burger .
更新:据我了解,我的 $scope.items 的当前数据结构做了很多尝试,它不适用于 ng-options,我想使用带有 track by 的 ng-options避免由 Angular js 生成哈希键。我还按照@MarcinMalinowski 的建议尝试了 ng-change,但我得到的 key 是未定义的。
那么,当我需要访问我的 $scope.items 中的任何项目时,我的 $scope.items 数据结构应该是什么?我可以在不执行循环的情况下访问它(就像我们从关联数组中访问项目一样),就像我现在可以使用正确的数据结构访问它并且只使用 ngoptions 和 track by。
var app = angular.module("myApp", []);
app.controller("MyController", function($scope) {
$scope.items = [
{
"title": "1",
"myChoice" :"",
"choices": {
"pizza": {
"type": 1,
"arg": "abc",
"$$hashKey": "object:417"
},
"burger": {
"type": 1,
"arg": "pqr",
"$$hashKey": "object:418"
}
}
},
{
"title": "2",
"myChoice" :"",
"choices": {
"pizza": {
"type": 1,
"arg": "abc",
"$$hashKey": "object:417"
},
"burger": {
"type": 1,
"arg": "pqr",
"$$hashKey": "object:418"
}
}
}
];
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<ul ng-app="myApp" ng-controller="MyController">
<div ng-repeat="data in items">
<div>{{data.title}}
</div>
<select ng-model="data.myChoice"
ng-options="key as key for (key , value) in data.choices track by $index"><option value="">Select Connection</option></select>
</div>
</ul>
【问题讨论】:
-
为什么不
track by $index -
@MaximShoustin 添加 trackby $index 总是自动选择最后一项。查看我的更新,我已经添加了 $index,现在我无法选择任何其他项目
-
当提到自己(“我”)时,请始终使用大写字母。这将在改进您的帖子时为一些志愿编辑节省一些工作(大概所有 278 个都有相同的错误)。谢谢!
标签: javascript angularjs