检查对象数组的长度以获取 ng-if 中的特定值

Check length of an array of objects for a specific value in ng-if

我传递的对象数组如下所示:

"articles": [
    {
        "_id": "1234",
        "type": "location",
        "content": {}
    },  
    {
        "_id": "1235",
        "type": "event",
        "content": {}
    }, ...

然后我使用 ng-repeat 循环遍历我按事件过滤的数组:

    <div ng-if="articles.type == event && articles.length > 0">
        <h3>Events</h3>
        <ul>
            <li ng-repeat="article in articles | filter: { type: 'event'} track by $index">
                <h2>{{article.content.title}}</h2>
                <p>{{article.content.intro}}</p>
            </li>
        </ul>
    </div>

    <div ng-if="articles.type == location && articles.length > 0">
        <h3>Hotspots</h3>
        <ul>
            <li ng-repeat="article in articles | filter: { type: 'location'} track by $index">
                <h2>{{article.content.title}}</h2>
                <p>{{article.content.intro}}</p>
            </li>
        </ul>
    </div>

我试图实现的行为是,如果没有类型为事件或位置的文章,我就不会显示它们。

我的问题是如何在我的 ng-if 中检查它,因为现在我检查的是整个数组的长度,而不是该类型文章的数组长度。

在范围内创建方法

$scope.isExists=function(type){
  var obj = $scope.articles.find(function(x){ return x.type == type ; });
  return obj !== null;
}

那就这样试试

在html

<div ng-if="isExists('event')">

<div ng-if="isExists('location')" >

也许是这样的:

$scope.article_type = function(type) {
    for (i = 0; i < $scope.articles.length; i += 1) {
        if ($scope.articles[i].type === type) {
            return true;
        }
    }
    return false;
}

然后在你的 HTML:

<div ng-show="article_type('event')">

编辑:Anik 的回答更优化