c# - Angular 循环没有正确迭代

标签 c# angular asp.net-web-api

我有一个休假管理系统的要求,用户可以根据他们的分配申请休假,并使用 AngularASP.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/

相关文章:

c# - Ninject Factory 扩展与 Lazy<T>

c# - 我可以避免在这里创建一个类吗?

带有 *ngIf 的 Angular 数据表显示错误

c# - 正则表达式如何匹配字符串末尾的下划线?

c# - 如何使用 await 在自定义 TaskScheduler 上运行任务?

angular - *ngFor 不适用于 Angular 2

angular - loadchildren 在 Angular4 中不起作用?

.net - REST API : GET request with body

r - 通过 API 调用获取文件(R & 管道工)

asp.net-mvc - 如何处理 ASP.NET Web API 中的 OperationCanceledException?