Angularjs ng类隐藏n>;0在我的日历上出现整数/字符串

Angularjs ng类隐藏n>;0在我的日历上出现整数/字符串,angularjs,Angularjs,我想隐藏日历中显示的日期的任何重复事件。我现在有一个日历小部件,上面有这样的日期 9 {{ EVENT DATA }} MON {{ EVENT DATA }} 9 {{ EVENT DATA }} MON {{ EVENT DATA }} 9 {{ EVENT DATA }} MON {{ EVENT DATA }} 10 {{ EVENT DATA }} TUE {{ EVENT DATA }} 11 {{ EVE

我想隐藏日历中显示的日期的任何重复事件。我现在有一个日历小部件,上面有这样的日期

9      {{ EVENT DATA }}
MON    {{ EVENT DATA }}

9      {{ EVENT DATA }}
MON    {{ EVENT DATA }}

9      {{ EVENT DATA }}
MON    {{ EVENT DATA }}

10     {{ EVENT DATA }}
TUE    {{ EVENT DATA }}

11     {{ EVENT DATA }}
WED    {{ EVENT DATA }}

12     {{ EVENT DATA }}
THURS  {{ EVENT DATA }}
我希望它看起来像这样

9      {{ EVENT DATA }}
MON    {{ EVENT DATA }}

       {{ EVENT DATA }}
       {{ EVENT DATA }}

       {{ EVENT DATA }}
       {{ EVENT DATA }}

10     {{ EVENT DATA }}
TUE    {{ EVENT DATA }}

11     {{ EVENT DATA }}
WED    {{ EVENT DATA }}

12     {{ EVENT DATA }}
THURS  {{ EVENT DATA }}
其中日期的n+1出现被隐藏。我熟悉使用
$首先
,但我想弄清楚怎么做$第一个匹配的str。有人有经验吗

这是我正在玩的一个JSFIDLE。非常感谢您的帮助!

您可以做一个标记,标记重复项集合中的第一个项,然后在您的
ng repeat
中使用它

其思想是在集合上迭代,并且在第一次找到项时,将其上的属性(
isFirst
)设置为true,并且仅当该条件存在时才显示日期。像这样:

app.filter('myFilter', function() {
  return function(collection, key) {
    var output = [],
      keys = [];

    angular.forEach(collection, function(item) {
      var ikey = item[key];
      if (keys.indexOf(ikey) === -1) {
        keys.push(ikey);
        item['isFirst'] = true;
      }
      output.push(item);
    });

    console.log(output);
    return output;
  };
});
然后在您的
ng中重复

<div class="row individualMeetingRow" ng-repeat="meeting in user.meeting | myFilter:'start_time' | orderBy:['start_time']">

<!-- code omitted for brevity -->
  <!-- HERE -->
  <div class="col-sm-6" ng-show=meeting.isFirst> 
    <p>{{ meeting.start_time | date : "d"}}</p>
    <p>{{ meeting.start_time | date : "EEE"}}</p>
  </div>
  <div class="col-sm-6 pull-right"> 
    <p>{{ meeting.title}}</p>
    <p>{{ meeting.address_country}}</p>
  </div>

{{meeting.start_time}日期:“d}

{{meeting.start_time}日期:“EEE”}

{{会议名称}

{{会议地址{国家}

其中,
myFilter
是刚创建的过滤器的名称,
'start\u time'
是您用于匹配项目的标准(并查看哪一个重复)


请参阅。

您可以根据开始时间和循环对元素进行分组,并在angularjs中迭代它们,而不是根据第一个重复的开始时间进行隐藏

例如,对于您的会议阵列,请按如下方式转换阵列:

var oldStartTime = 0;
var mainMeetingList= [];
var oldObj = {
    startTime: "",
    meetings: []
};
meeting.forEach(function(obj, index) {
    if(oldStartTime != obj.start_time) {
        oldObj =  {
    start_time: obj.start_time,
    meetings: [obj]
};

oldStartTime = obj.start_time;
mainMeetingList.push(oldObj);
    } else {
    oldObj.meetings.push(obj);
}

});
现在,您可以基于开始时间迭代mainMeetingList数组,并显示该开始时间的所有会议

<div class="row individualMeetingRow" ng-repeat="meetingObj in mainMeetingList orderBy:['start_time']">
  <div class="col-2"> 
    <p>{{ meetingObj .start_time | date : "d"}}</p>
    <p ng-repeat="mt in meetingObj.meetings orderBy:['start_time']">{{ mt.start_time | date : "EEE"}}</p>
  </div>
</div>

{{meetingObj.开始时间|日期:“d}}

{{{mt.start_time}日期:“EEE”}

另外,$first将只匹配数组的第一个元素。如果10号有两个会议呢。然后它将与第一个元素不匹配,因为它对于第四个元素是重复的。这可以在以后重复。所以我觉得你不应该先用。 我在angularjs网站上发现$first描述如下:


如果重复元素在迭代器中是第一个,则$first BOOLINE true。

一个建议是进行排序,然后循环,随着日期的增加,向每个会议添加第一次出现的属性。使用控制器中的代码,按天对会议进行分组(或者只提取不同的日期,因为您似乎不使用日期以外的任何信息)。然后显示日期。简言之,这是控制器的工作,而不是视图的工作。@JBNizet我想你误解了。我添加了其他信息来弥补这一差距。我没有误解。如果你使用代码按天分组会议,你将得到一个od days数组,其中每天包含一个会议数组,你只需要ng在视图中重复显示日期,以及每天内部的会议。啊,我现在明白了。我将尝试一下。这是一个好主意。但我应该提到,每天有很多“会议”在代码中没有的列中。我需要显示这些。所以我只想隐藏number@IWI,但是…预期的输出会是怎样的。我在问题图像中只看到
9个月
10个星期二
之间的空白。应该有什么?您打算如何使用这些隐藏的元素?