我在控制器中有以下范围:
for(x = 1; x <= 15; x++)
{
x = parseInt(x);
Scope.numArr[x] = x;
}
在视图中,我使用以上范围“numArr”,
的下拉框<select data-ng-model="printValue" ng-options="v for (k,v) in numArr|
orderBy:'number()': reverse=false">
<option value="">Print options</option>
</select>
因为无法对这个简单的数组进行排序,我正撞墙而去。正如Angularjs doc中提到的,它是整数数组而不是字符串类型。什么是最简单的Angular表达式,以自然顺序显示值,如1,2,3,4,5 ... 15。
目前,Angularjs会自动对下拉框进行排序并显示为1,11,12 ... 15,2,3 ......等。
在 PHP或Python 中,如果我使用上面的数组,我将按照我在数组中指定的相同顺序获取下拉列表并且没有头疼。在AnguarJs,事情是奇怪的。这句话只是为了表明事情应该尽可能简单,这是程序员喜欢的。
我坚信 AngularJS团队已将这些简单的数组值显示复制到下拉框中的自动排序列表。如果团队尽可能保持简单,那就太好了。
非常感谢任何帮助。
答案 0 :(得分:1)
orderBy filter can only be used on Arrays,而不是对象数据源。
话虽这么说,您可以轻松创建自定义过滤器,将对象哈希转换为数组:
app.filter('toArray', function() {
return function(data) {
var array = [];
for(var d in data) {
array.push({key:d, value:data[d]});
}
return array;
}
});
然后,您可以将过滤器应用于对象数据源:
<body ng-app="app" ng-controller='MyController'>
<div ng-repeat="item in arr | toArray | orderBy: 'key':true">
{{item.key}}{{item.value}}
</div>
</body>
toArray过滤器将对象数据源转换为具有键和值属性的对象文字数组。然后orderBy按照指定为第二个参数的属性(&#39; key&#39;或&#39; value&#39;)对结果数组进行排序。最后,第三个参数指定是否反转数组。
在选择中使用
<select data-ng-model="printValue" ng-options="item.key as item.value for item in arr | toArray | orderBy: 'key':true">
<option value="">Print options</option>
</select>
答案 1 :(得分:0)
试试这个:
Controller.js:
vm.number = 0;
vm.sample = [];
function activate() {
return common.activateController([getNumber()], controllerId)
.then(function () {
});
}
function getNumber(){
for (var i = 0; i <= 15; i++) {
i = parseInt(i);
vm.sample.push({ number: i });
}
}
View.html
<select data-ng-model="vm.number" data-ng-options="num.number as num.number for num in vm.sample | orderBy:'number'">
</select>
答案 2 :(得分:0)
试试这个
<强> Working Demo 强>
HTML
<select data-ng-model="printValue">
<option value="">Print options</option>
<option ng-repeat="key in notSorted(numArr)" ng-init="value = numArr[key]" value="{{key}}">{{value}}</option>
</select>
脚本
var DemoApp = angular.module("DemoApp", []);
DemoApp.controller("DemoController",
function DemoController($scope) {
$scope.numArr = {};
for (var x = 1; x <= 15; x++) {
x = parseInt(x);
$scope.numArr[x] = x;
}
$scope.notSorted = function (obj) {
if (!obj) {
return [];
}
return Object.keys(obj);
}
});
如果您想要撤销订单,请尝试以下
<强> Working Demo 强>
<option ng-repeat="key in notSorted(numArr).slice().reverse()" ng-init="value = numArr[key]" value="{{key}}">{{value}}</option>