【问题标题】:OrderBy filter angular with nested objects throws error带有嵌套对象的 OrderBy 过滤器角度会引发错误
【发布时间】:2016-06-15 10:11:23
【问题描述】:

我有一个这样的数组:

[{
    "type": "adserver",
    "stats": {
        "10021": 48082,
        "10023": 1741
    }
}, {
    "type": "adserver",
    "stats": {
        "10021": 12312,
        "10023": 23
    }
}, {
    "type": "adserver",
    "stats": {
        "10021": 53423,
        "10023": 54
    }
}, {
    "type": "adserver",
    "stats": {
        "10021": 12345,
        "10023": 12
    }
}]

我正在尝试使用:

ng-repeat = "array | orderBy:'stats.10021'"

它会抛出这个错误:

语法错误:标记“.10021”是第 6 列中的意外标记 表达式 [stats.10021] 从 [.10021] 开始。

【问题讨论】:

  • {{single.type}} {{single.stats}}

标签: angularjs


【解决方案1】:

该错误与您尝试访问键是数字的对象属性有关。您必须使用 square 参数访问属性。

您不能使用点符号访问对象属性,其中键是数字!

试试这个:

ng-repeat = "(key, value) in array | orderBy:'stats['10021']"

【讨论】:

    【解决方案2】:

    Javascript 对象属性名称不能以数字开头,因此您只能使用[] 表示法将它们作为字符串名称访问

    试试

    orderBy:stats['10021']
    

    【讨论】:

      【解决方案3】:

      jsfiddle

      <div ng-app="myApp" ng-controller="Ctrl">
        <div ng-repeat="single in array | orderBy:'stats.10021'">
           <businesscard>{{single.type}} {{single.stats}}</businesscard>
        </div>
      </div>
      
      angular.module('myApp', [])
      .controller('Ctrl', function($scope) {
          $scope.array = [{"type":"adserver","stats":{"10021":48082,"10023":1741}}, {"type":"adserver","stats":{"10021":12312,"10023":23}}, {"type":"adserver","stats":{"10021":53423,"10023":54}}, {"type":"adserver","stats":{"10021":12345,"10023":12}}]
      });
      

      输出

      广告服务器 {"10021":12312,"10023":23}

      广告服务器 {"10021":12345,"10023":12}

      广告服务器 {"10021":48082,"10023":1741}

      广告服务器 {"10021":53423,"10023":54}

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-16
        • 2015-09-15
        相关资源
        最近更新 更多