我有一个休假管理系统的要求,用户可以根据他们的分配申请休假,并使用 Angular
和 ASP.NET Web Api
。示例:
UserId - Leave - Allotment - Year
1001 - Casual - 20 - 2019
1001 - Sick - 20 - 2019
1002 - Annual - 10 - 2019
这是非常基础的。因此,每当用户尝试请假时,我正在做的事情是,系统从开始日期和结束日期获取总天数,最后检查总天数的分配。在前端,用户必须选择一个类型,为此要扣除具体的分配号,如下所示:
<label for="leaveType">Leave Type</label>
<select [(ngModel)]="leaveType" [ngModelOptions]="{standalone: true}" class="form-control">
<option value="">Please select leave</option>
<option *ngFor="let value of leaveType" [ngValue]="value.LeaveType">
{{value.LeaveType}}
</option>
</select>
我正在使用 ASP.NET Web Api
为特定用户完美地获取休假分配详细信息,这就是我所做的:
leaveType: string;
chkLeave: number = 0;
userLeave: any;
this.dataservice.GetLeaveInfo(selectedValue).subscribe(result => { //selectedValue is another drop down value where users are being selected with user id
this.userLeave = result;
}, error => console.error(error));
最后,在使用 Angular
的另一种方法中,我尝试验证是否有针对该特定休假类型的可用休假分配,如下所示:
chkAllotment() {
var startDate = new Date(Result[0]);
var endDate = new Date(Result[1]);
const diff = endDate.getDate() - startDate.getDate();
debugger;
for(let i = 0; i < this.userLeave.length; i++) {
if(userLeave[i].LeaveName = this.leaveType && userLeave[i].LeaveRemains >= diff)
this.chkLeave = 1;
}
};
最后我这样做是为了检查用户是否可以使用休假类型分配:
if(this.chkLeave == 1) {
alert("You can have the leave.");
} else {
alert("Oops! You can't have the leave.");
}
现在的问题是多次休假分配,该方法完美运行并验证了单次分配的分配,如年度。比如说用户 1001,它有两个休假类型分配。因此,当我选择临时休假时,它第一次根据分配完美地检查用户是否有资格休假但是当我选择第二种休假类型时它卡住了,说病假并且休假天数超过分配没有(基本上分配是总愉快的日子)。它保留第一次休假的状态,变量 chkLeave 根据第一次选择的休假类型保存数字 0 或 1。在浏览器的 inspect 元素中,我可以在数组中看到用于休假分配的详细信息,但在验证时,循环不知何故没有给出预期的输出。 for循环有什么问题吗?
最佳答案
尝试进行此更改,因为我注意到您有 hte chkLeave,它没有再次设置为 0,因此它保留了上一次迭代的 1。
chkAllotment() {
var startDate = new Date(Result[0]);
var endDate = new Date(Result[1]);
const diff = endDate.getDate() - startDate.getDate();
debugger;
// Re initialize the chkLeave to 0
this.chkLeave = 0;
for(let i = 0; i < this.userLeave.length; i++) {
if(this.userLeave[i].LeaveName = this.leaveType && userLeave[i].LeaveRemains >= diff)
this.chkLeave = 1;
}
};
另外,如果休假超过一个月,您处理差异的方式可能会导致问题。
The getDate() method returns the day of the month (from 1 to 31) for the specified date.
这意味着 2019-12-01 和 2020-01-01 有 0 天的差异。
基本上这可能是这两个原因中的任何一个。
编辑 1:
userLeave[i].LeaveName == this.leaveType
应该是
userLeave[i].LeaveType == this.leaveType
编辑 2:
要计算两天之间的差异,请参阅指南 here .但是要小心,因为你想要没有秒/毫秒的日子,因为它可能会产生舍入问题。
关于c# - Angular 循环没有正确迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59227020/