Angular JS - 仅显示JSON数据中具有最高值的字段

时间:2015-11-27 14:55:10

标签: angularjs json

我从数据库中检索了JSON

[{"id":1,"firstname":"Alan Cayetano","numbers":2},{"id":2,"firstname":"Bong     Marcos","numbers":0},{"id":3,"firstname":"I Dont Care","numbers":3},{"id":4,"firstname":"toto tata","numbers":0},{"id":5,"firstname":"titi terter","numbers":0},{"id":6,"firstname":"Ian Go","numbers":0}]

这是在表格结果

中显示的结果
firstname   lastname   numbers
Alan        Cayetano    10
Bong        Marcos      4
Ian         Go          3
What        Ever        0

我只想要具有最高数值的数据 在这种情况下

firstname    lastname   numbers
Alan         Cayetano    10

此数据是从数据库

动态获取的

我的angular.js

<script src="//code.angularjs.org/1.4.8/angular.js"></script>
<script>
    var app = angular.module('myApp', []);

    app.config(function($interpolateProvider) {
    $interpolateProvider.startSymbol('//');
    $interpolateProvider.endSymbol('//');
    });

    app.controller('customersCtrl',['$scope','$http',function($scope, $http) {
        //$http.get("http://localhost:8093/voters/voters_angular")
        $http.get("{{ path('vp_president') }}")
        .success(function (response) {
            $scope.names= JSON.parse(response);
        });
    }]);
    //console.log(names);
</script>   

<div ng-app="myApp" ng-controller="customersCtrl">
<table class="table">
    //names//

    <thead>
        <tr>
            <th>Firsname</th>
            <th>Lastname</th>
            <th>NUm</th>
        </tr>
    </thead>
    <tbody>
        <tr ng-repeat="x in names">
            <td>//x.firstname//</td> 
            <td>//x.lastname//</td>
            <td>//x.numbers//</td>
        </tr>
    </tbody> 
</table>
</div>  

如何实现这一目标?我还在学习Angular Js 我想知道Angular的$ last过滤器是否适用于此

4 个答案:

答案 0 :(得分:2)

这应该像描述一样工作

Link

<tr ng-repeat="x in names| orderBy:'-numbers' | limitTo:1">
    <td>//x.id//</td> 
    <td>//x.firstname//</td>
    <td>//x.numbers//</td>
</tr>

答案 1 :(得分:1)

最好在控制器中找到最大值,而不是在视图中。

  function findMax(names) {
        var result = null;
        for (var i = 0; i < names.length; i++) {
            var name = names[i];
            if (result == null || name.numbers > result.numbers) {
                result = name;
            }
        }
        return result;
    }

$scope.name = findMax($scope.names);

并在html中

<tr>
    <td>{{name.firstname}}</td> 
    <td>{{name.lastname}}</td>
    <td>{{name.numbers}}</td>
</tr>

在AngularJS中,最好在视图中显示之前预先对数据进行排序,ng-repeat为其重复的每个对象创建一个观察者,在AngularJS中,如果你有许多观察者你的表现,观察者的数量与表现相关联最差。

如果您不需要显示其他值,则无需为该值创建观察者,因此最好对阵列进行预排序。

答案 2 :(得分:1)

你可以这样做:

<tr ng-repeat="x in names | orderBy:numbers:reverse | limitTo:1">

答案 3 :(得分:-1)

您可以使用:

angular.forEach($scope.names, function (value, key) { //code });

使用angular foreach,您可以在$ scope.names中逐行读取,并使用您的逻辑获取msx值。

当:

键 - &gt;是位置(使用警报(键)查看信息)

值 - &gt;是一个json的行。对于获取数据,请使用value.id,value.firstname等