如果我在 ng-options 中使用 track by,则选择框值不会更新
The selectbox value is not updated if I use track by in ng-options
当我在 ng-options
中使用 track by
时,即使我选择了选择框中的值之一,Angular 也不会更新选择框的值。第二次尝试后,即使模型值已设置,它仍按预期工作。
var myapp = angular.module('myapp', []);
myapp.controller('FirstCtrl', function ($scope) {
$scope.items = [
['ali', 'ali']
];
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.1/angular.js"></script>
<div ng-app="myapp">
<fieldset ng-controller="FirstCtrl">
value: {{selected}} <br><br>
<select
ng-options="item[0] as item[1] for item in items track by item[0]"
ng-model="selected"></select>
</fieldset>
</div>
Objective 的 track by 是用对象而不是数组元素来使用它。我建议你使用对象。这是一个例子
var myapp = angular.module('myapp', []);
myapp.controller('FirstCtrl', function ($scope) {
$scope.items = [
{ id :1, value : 'ali'},
{ id :2, value : 'ahmed'}
];
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.1/angular.js"></script>
<div ng-app="myapp">
<fieldset ng-controller="FirstCtrl">
value: {{selected}} <br><br>
<select
ng-options="item as item.value for item in items track by item.id"
ng-model="selected"></select>
</fieldset>
</div>
它实际上在文档中有解释(https://docs.angularjs.org/api/ng/directive/ngOptions - 查找段落 "select as and track by")
您似乎不能将 track by
与某些 select as
表达式一起使用。
但是,如果您使用 ng-options="item as item[1] for item in items track by item[0]"
而不是 ng-options="item[0] as item[1] for item in items track by item[0]"
,它会起作用
如评论track by
需要一个 objects
的数组,然后您可以通过任何对象属性进行跟踪
var myapp = angular.module('myapp', []);
myapp.controller('FirstCtrl', function ($scope) {
$scope.items = [
{ name : "ali" },
{ name : "ben" },
{ name : "bill" }
]
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.1/angular.js"></script>
<div ng-app="myapp">
<fieldset ng-controller="FirstCtrl">
value: {{selected}} <br><br>
<select
ng-options="item as item.name for item in items track by item.name"
ng-model="selected"></select>
</fieldset>
</div>
当我在 ng-options
中使用 track by
时,即使我选择了选择框中的值之一,Angular 也不会更新选择框的值。第二次尝试后,即使模型值已设置,它仍按预期工作。
var myapp = angular.module('myapp', []);
myapp.controller('FirstCtrl', function ($scope) {
$scope.items = [
['ali', 'ali']
];
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.1/angular.js"></script>
<div ng-app="myapp">
<fieldset ng-controller="FirstCtrl">
value: {{selected}} <br><br>
<select
ng-options="item[0] as item[1] for item in items track by item[0]"
ng-model="selected"></select>
</fieldset>
</div>
Objective 的 track by 是用对象而不是数组元素来使用它。我建议你使用对象。这是一个例子
var myapp = angular.module('myapp', []);
myapp.controller('FirstCtrl', function ($scope) {
$scope.items = [
{ id :1, value : 'ali'},
{ id :2, value : 'ahmed'}
];
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.1/angular.js"></script>
<div ng-app="myapp">
<fieldset ng-controller="FirstCtrl">
value: {{selected}} <br><br>
<select
ng-options="item as item.value for item in items track by item.id"
ng-model="selected"></select>
</fieldset>
</div>
它实际上在文档中有解释(https://docs.angularjs.org/api/ng/directive/ngOptions - 查找段落 "select as and track by")
您似乎不能将 track by
与某些 select as
表达式一起使用。
但是,如果您使用 ng-options="item as item[1] for item in items track by item[0]"
而不是 ng-options="item[0] as item[1] for item in items track by item[0]"
如评论track by
需要一个 objects
的数组,然后您可以通过任何对象属性进行跟踪
var myapp = angular.module('myapp', []);
myapp.controller('FirstCtrl', function ($scope) {
$scope.items = [
{ name : "ali" },
{ name : "ben" },
{ name : "bill" }
]
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.1/angular.js"></script>
<div ng-app="myapp">
<fieldset ng-controller="FirstCtrl">
value: {{selected}} <br><br>
<select
ng-options="item as item.name for item in items track by item.name"
ng-model="selected"></select>
</fieldset>
</div>