我在AngularJS中创建了一个日历应用程序,它从三个不同的API端点提取数据。我在使用ng-show
将数据端点的日期范围与Javascript生成日期进行比较时遇到问题。
这是代码:
<tr ng-repeat="date in futureDates">
<td> {$ date | date : 'yyyy-MM-dd' $} </td>
<td ng-repeat="users in calendar_users track by $index"
ng-show="users.fields.team_name == team.pk">
<span ng-repeat="activities in calendar_activities track by $index"
ng-show="activities.fields.user == users.fields.username &&
activities.fields.date == date | date 'yyyy-MM-dd'">
{$activities.fields.activity$}
{$activities.fields.date | date $}
</span>
</td>
</tr>
第一个<td>
代码列出了30天的日期,第二个<td>
代码使用内部的<span>
来比较值并查看它们是否匹配。
对于这行代码:
<span ng-repeat="activities in calendar_activities track by $index"
ng-show="activities.fields.user == users.fields.username &&
activities.fields.date == date | date 'yyyy-MM-dd'">
在代码的ng-show
部分,&&
之前的第一个条件
正确评估,但在&&
条件没有正确评估之后。
activities.fields.date
的日期格式为2017-03-09(作为示例)
date | date 'yyyy-MM-dd'">
是由Javascript自动生成的日期列表。该日期采用时间戳格式,因此我尝试使用代码| date 'yyyy-MM-dd'
的以下部分进行格式化,以便将其格式化为与我相同的日期进行比较至。
This is how the calendar looks like
两个条件都评估为真,所有结果都打印出来。
如果以下代码行:
<span ng-repeat="activities in calendar_activities track by $index"
ng-show="activities.fields.user == users.fields.username &&
activities.fields.date == date | date 'yyyy-MM-dd'">`
变为:
<span ng-repeat="activities in calendar_activities track by $index"
ng-show="activities.fields.user == users.fields.username">`
(注意:我已删除&& activities.fields.date == date | date 'yyyy-MM-dd'"
)
第一个条件成功评估,只有日期没有按预期进行评估。
This is the end result.信息正确地与日历上的每个人联系在一起,唯一的问题是单元格中的信息没有与日历上的日期进行比较,因此为什么预订会出现在每个单元格上专栏中的那个人。
希望我已经提供了足够的信息来理解我尝试做的事情的背景。任何帮助或建议表示赞赏。
答案 0 :(得分:0)
您正在尝试比较字符串和日期对象,这就是第二个条件总是失败的原因。格式化日期date | date 'yyyy-MM-dd'
不会更改数据类型。这只是为了显示目的。同时比较它们是否相等的两个日期总是很棘手,因为即使它们具有相同的日期,2个日期对象也完全不同。这是解决此问题的一种方法。
<span ng-repeat="activities in calendar_activities track by $index"
ng-show="activities.fields.user == users.fields.username &&
compareDate(activities.field.date)">
在控制器中
$scope.compareDate = function(fieldDateStr){
var fieldDate= new Date(fieldDateStr);
if(fieldDate.getDate() == $scope.date.getDate() &&
fieldDate.getMonth() == $scope.date.getMonth() &&
fieldDate.getYear() == $scope.date.getYear()){
return true;
}
else{
return false;
}
};
比较2个日期的更详细说明here。