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个星期二
之间的空白。应该有什么?您打算如何使用这些隐藏的元素?