当前位置: 首页 > 知识库问答 >
问题:

角度顺序按数字排序为ng重复中的文本

严升
2023-03-14

我有这个数据:

[{"id":"42","firstname":"Sarah","lastname":"Dilby","age":"40","cars":"Yaris"},
{"firstname":"Jason","lastname":"Diry","age":"5","id":"5"},
{"id":"6","firstname":"Bilson","lastname":"Berby","age":"1","cars":"Tipo"}]

当我在ng-repeat中按id或按年龄排序时,它将数字作为文本排序。因为我找不到任何地方写着这是一个问题,我猜想是我的代码有问题。我已经创建了这个小提琴:http://jsfiddle.net/vsbGH/1/抱歉的模板,但jsfiddle不允许在html框中。总之,这是加载和排序数据的代码:

//user data
app.service('People', function() {
var People = {};
People.details = [{"id":"42","firstname":"Sarah","lastname":"Dilby","age":"40","cars":"Yaris"},
                  {"firstname":"Jason","lastname":"Diry","age":"5","id":"5"},
                  {"id":"6","firstname":"Bilson","lastname":"Berby","age":"1","cars":"Tipo"}]
return People;
});

//list ctrl
controllers.listCtrl = function ($scope,People) {
 $scope.people = People.details;

 $scope.sortList = function(sortname) {
    $scope.sorter = sortname;
 }
}

这是模板的ng重复部分:

<tr ng-repeat="person in people | orderBy:sorter ">
        <td>{{person.id | number}}</td>
        <td>{{person.firstname}} </td>
        <td>{{person.lastname}} </td>
        <td>{{person.age | number}}</td>
        <td>{{person.cars}} </td>
 </tr>

如果你能帮助我理解为什么数字数据不按数字排序,而按文本排序,我将不胜感激。

共有3个答案

程博学
2023-03-14

在您的ng重复指令中,您正在使用数字过滤器

<td>{{person.id | number}}</td>

过滤器用于格式化输出,但不会更新模型属性。例如:个人。id=1234.56789将呈现为1234.568。

如上所述,您必须将年龄转换为数字类型。然后orderBy将按应有的方式工作。例如在您的服务中:

angular.forEach(People.details, function (detail) {
  detail.age = parseFloat(detail.age);
});
韩鸿
2023-03-14

您不必修改您的 JSON。你可以像这样将函数传递给 orderBy 过滤器:

$scope.sorterFunc = function(person){
    return parseInt(person.id);
};

<tr ng-repeat="person in people | orderBy:sorterFunc ">
        <td>{{person.id | number}}</td>
        <td>{{person.firstname}} </td>
        <td>{{person.lastname}} </td>
        <td>{{person.age | number}}</td>
        <td>{{person.cars}} </td>
 </tr>
齐弘业
2023-03-14

我认为最合适的解决方案是正确格式化我在JSON对象上的数字,即不要用引号包装它们。所以:

 [{"id":"42","firstname":"Sarah","lastname":"Dilby","age":"40","cars":"Yaris"},
  {"firstname":"Jason","lastname":"Diry","age":"5","id":"5"},
  {"id":"6","firstname":"Bilson","lastname":"Berby","age":"1","cars":"Tipo"}]

变成了:

[{"id":42,"firstname":"Sarah","lastname":"Dilby","age":40,"cars":"Yaris"},
 {"firstname":"Jason","lastname":"Diry","age":5,"id":5},
 {"id":6,"firstname":"Bilson","lastname":"Berby","age":1,"cars":"Tipo"}]

如果无法纠正JSON数据的格式,我猜SergL的解决方案是不错的。

除此之外,在我的具体案例中,问题是如何处理服务器端的PHP json_encode函数。默认情况下,它将数字视为字符串。要修复此问题,我必须将<code>JSON_NUMERIC_CHECK</code>选项添加到PHP脚本中的编码方法中:

json_encode($assoc_array,JSON_NUMERIC_CHECK);
 类似资料:
  • 问题内容: 我有此数据: 当我通过ng- repeat按id或按年龄排序时,它会将数字排序为文本。由于我找不到它写的任何地方的问题,所以我猜我的代码有问题。我创建了这个小提琴:http : //jsfiddle.net/vsbGH/1/很抱歉,该模板,但jsfiddle不允许在html框中使用。无论如何,这是加载和排序数据的代码: 这是模板的ng-repeat部分: 非常感谢您能帮助我理解为什么数

  • 问题内容: 如何按键排序为整数? 我有以下对象; HTML: 当前的输出顺序是 但是我想要 不要为我工作。 有任何想法吗? 谢谢! 问题答案: 一种选择是使用中间过滤器。 代码和代码段 注意: 上面的过滤器需要Underscore.js,如果不使用它,可以重写过滤器。

  • 问题内容: 我有一个用户模型和一个提交模型。每个提交都有一个上载用户的外键字段user_submitted。 我的问题很简单:如何获得提交量最多的三个用户的列表? 我尝试在用户模型上创建num_submissions方法: 然后执行: 但这失败了,就像我尝试过的所有其他尝试一样。我实际上可以使用智能数据库查询吗?还是我应该在视图文件中做些更怪异的事情? 问题答案: 你没有在示例模型代码中提及,但在

  • 我有一个Linkedhasmap并有键和值 现在我想按值对映射进行排序,键和值应该如下所示 请告知

  • 问题内容: myArray = [Step 6, Step 12, Step 5, Step 14, Step 4, Step 11, Step 16, Step 9, Step 3, Step 13, Step 8, Step 2, Step 10, Step 7, Step 1, Step 15] 如何以这种方式在上面对这个数组排序? 我很快使用了此功能,但它是按这种方式排序的 问题答案: 另

  • 问题内容: 我是Java的新手,正在尝试按字母顺序排列术语的arrayList。(一个术语定义为一个字符和一个整数)(例如 我的代码如下: 为什么这不起作用?以及我该如何完成呢?我的arrayList称为术语,填充有Term类型 问题答案: 您在这行代码中遇到的问题。您的课程不是So 的类型,这两个对象将基于哪个属性或条件方法? 您必须使您的类为Comparable类型。和,根据您的需要覆盖该方法