在某些条件下使用ng-repeat显示JSON

时间:2017-11-30 06:35:23

标签: javascript angularjs json

我有这个JSON文件,我用$http()来获取。它是这样的:

[{
    "sno": "4",
    "eventname": "cricket",
    "event-type": "sports",
    "A-team": "mme",
    "B-team": "eee",
    "Gender": "male",
    "time": "2017-11-24 00:00:00",
    "isresult": "1",
    "result": "[{\"a\":\"121/5\",\"b\":\"122/4\"}]",
    "match-type": "semi",
    "venue": "downs"
},
{
    "sno": "2",
    "eventname": "cricket",
    "event-type": "sports",
    "A-team": "cse",
    "B-team": "mme",
    "Gender": "female",
    "time": "2017-11-17 00:00:00",
    "isresult": "0",
    "result": "winner team-a",
    "match-type": "league",
    "venue": "tsg"
}]

我需要使用ng-repeat显示此内容,但仅当其属性(布尔值){{item.result}}isresult时才显示0。如果isresult === 1event-type=='sports',我需要ng-repeat所需的数组。

我做了类似的事情:

<th ng-if="item.isresult === 1 && item[event-type] === 'sports'">
   <div ng-repeat="i in item.result">
      {{i.a}}<br>{{i.b}}
   </div>
</th>

此外,如果event-type === 'athletics',我会在result

的数组中得到[{"1":"Xjdjd"}, {"2":"Jxjxj"}, {"3":"Dhdj"}]

我该如何解决?

3 个答案:

答案 0 :(得分:0)

如果我理解你的问题,你可以尝试这样的事情:

<th>
   <div ng-if="item.isresult=='0'">{{item.result}}</div>
   <div ng-if="item.isresult=='1' && item[event-type]=='sports'" ng-repeat="i in item.result">
      {{i.a}}<br>{{i.b}}
   </div>
</th>

请注意, JSON 对象中的result仅限数组,{{1}的字符串也是。所以检查一下或解析它到一个数组。

答案 1 :(得分:0)

&#13;
&#13;
angular.module('app', []).controller('ctrl', function($scope) {
  $scope.data = [{
      "event-type": "sports",
      "isresult": "1",
      "result": [{
        "a": "121/5",
        "b": "122/4"
      }],
    },
    {
      "event-type": "sports",
      "isresult": "0",
      "result": "winner team-a",
    },
    {
      "event-type": "athletics",
      "isresult": "1",
      "result": [{
        '1': 'Xjdjd'
      }, {
        '2': 'Jxjxj'
      }, {
        '3': 'Dhdj'
      }],
    }
  ]
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<div ng-app='app' ng-controller='ctrl'>
  <div ng-repeat='item in data'>
    <div ng-if="item.isresult == 1 && item['event-type'] === 'sports'">
      <div ng-repeat="i in item.result">
        {{i.a}}<br>{{i.b}}
      </div>
    </div>
    <div ng-if="item.isresult == 0">
      {{item.result}}
    </div>
    <div ng-if="item['event-type'] === 'athletics'">
      <div ng-repeat="i in item.result">
        <div ng-repeat="(key, value) in i">
          {{key}}:{{value}}
        </div>
      </div>
    </div>
    <hr ng-if='!$last'>
  </div>
</div>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

这远非其他人的答案。

我已经制作了一个对这些值进行排序的功能。

Here's my fiddle

下面是项目的排序值的功能。

$scope.sortIsResult = function(item){
    var result = '';
    if(item.isresult==='0'){
        result = item.result;
    } else if (item.isresult==='1') {
        if(item['event-type'].trim()==='sports'){
            result = 'a:' + JSON.parse(item.result)[0]['a'] + '\n' 
                    + 'b:' + JSON.parse(item.result)[0]['b'];
        } else if(item['event-type'].trim()==='athletics'){
            result = '1:' + JSON.parse(item.result)[0]['1'] + '\n' 
                    + '2:' + JSON.parse(item.result)[1]['2'] + '\n'
                    + '3:' + JSON.parse(item.result)[2]['3'];
        }
    }
    return result;
};

也许这看起来很晕眩,但我认为使用&nbsp; ng-if&#39;,

会有限制

所以我喜欢使用功能。

我希望这对你有所帮助。 :)

不幸的是,&#39; \ n&#39;这个功能不起作用。

也许你还需要其他方法来打破界限。