AngularJS $过滤orderBy在带@符号的数组键中

时间:2015-03-20 10:50:28

标签: javascript angularjs angularjs-scope angularjs-filter

{
    "@odata.count": 52,
    "value": [
        {
            "@search.score": 0.58868027,
            "LastDirSyncTime": "2015-02-27T08:22:22+00:00"
        },
        {
            "@search.score": 0.58868029,
            "LastDirSyncTime": "2015-03-27T08:22:22+00:00"
        },
        {
            "@search.score": 0.60868029,
            "LastDirSyncTime": "2014-03-27T08:22:22+00:00"
        },
        {
            "@search.score": 0.58861029,
            "LastDirSyncTime": "2014-03-27T08:22:22+00:00"
        }
    ]
}

我有上面的json回复,我想orderBy我已经使用了

var newdata = $filter('orderBy')(data, '@search.score');

但它会返回Error: [$parse:lexerr] Lexer Error: Unexpected next character at columns 0-0 [@] in expression [@search.score].

有没有办法让我的结果通过@search.score键来订购?

2 个答案:

答案 0 :(得分:0)

解析您的对象并从'@ search.score'中删除'@search'

$scope.abc= [
{
  "score": 0.58,
  "LastDirSyncTime": "2015-02-27T08:22:22+00:00"
},
{
  "score": 0.59,
  "LastDirSyncTime": "2015-03-27T08:22:22+00:00"
},
{
  "score": 0.60,
  "LastDirSyncTime": "2014-03-27T08:22:22+00:00"
},
{
  "score": 0.52,
  "LastDirSyncTime": "2014-03-27T08:22:22+00:00"
}
];

然后你可以使用'orderBy'(https://docs.angularjs.org/api/ng/filter/orderBy

<table >
  <tr>
    <th>Score</th>
    <th>LastDirSyncTime</th>
  </tr>
  <tr ng-repeat="a in abc | orderBy:'score'">
    <td>{{a.score}}</td>
    <td>{{a.LastDirSyncTime}}</td>
  </tr>
</table>

答案 1 :(得分:0)

var newdata = $filter('orderBy')(data, '"@search.score"');

orderBy期望表达式@search.score未被识别为有效表达式。除了@之外,它还包含.,其解释方式与您预期的不同。

另一方面,

"@search.score"是一个有效的常量字符串表达式,它被解释为属性名称。

我不会在属性名称中使用点。

相关问题