以角度4

时间:2018-05-01 09:42:40

标签: angular typescript

我正在尝试在角度4应用程序中实现验证逻辑。如果任何数据无效,我需要阻止用户保存。

如果您发现我有isMinValidisMaxValid功能。我已声明了两个私有变量_isMinValid& _isMaxValid字段并使用true或false初始化它。

我在Ok方法中检查此变量的值,该方法保存信息。

我面临的问题是,为表中的每一行调用isMinValidisMaxValid函数,因此如果下一行是true,则为私有字段分配值因此。因此,最后一个值可能是true。我该如何解决这个问题?

 <tr *ngFor="let item of domicileInfo.taxAssesment.items; let last = last; let item_IDX = index">
              <td *ngIf="!last">
                <click-input [classNames]="{'has-warning': !isMinValid(item,item_IDX), 'number' : true}">
                  <input [(ngModel)]="item.minSize" required min="0" max="999999999999999" shortNumberFormat="shortNumberFormat:.0">
                </click-input>
              </td>

              <td *ngIf="!last" class="text-right">
                <click-input [classNames]="{'has-warning': !isMaxValid(item,item_IDX), 'number' : true }">
                  <input [(ngModel)]="item.maxSize" required min="0" max="999999999999999" shortNumberFormat="shortNumberFormat:.0">
                </click-input>
              </td>
</tr>


     private _isMinValid: boolean = false;
      private _isMaxValid: boolean = false;

      public ok() {
        if (this._isMinValid && this._isMaxValid) {
          this.data.domicileId = this.domicileId;
          this.data.domicileInfo = this.domicileInfo;
          this.hide(true);
        }
      }

  isMinValid(currentItem: any, item_IDX: number) {
    if (item_IDX === 0) {
      this._isMinValid = true;
      return true;
    }
    let previousItem = this.domicileInfo.taxAssesment.items[item_IDX - 1];
    if (+currentItem.minSize !== +previousItem.maxSize) {
       this._isMinValid = false;
      return false;
    }
     this._isMinValid = true;
    return true;
  }


  isMaxValid(currentItem: any, item_IDX: number) {
    if (item_IDX === 0) {
      this._isMaxValid = true;
      return true;
    }

    if (+currentItem.maxSize <= +currentItem.minSize) {
      this._isMaxValid = false;
      return false;
    }
    this._isMaxValid = true;
    return true;
  }

1 个答案:

答案 0 :(得分:0)

看起来,你想让它们对于第一个索引是真的,然后添加到你的代码中:你可以检查_isMaxValid_isMinValid是否已经为假,如果是,那么就不要不会给他们真实的。

isMaxValid(currentItem: any, item_IDX: number) {
    if (item_IDX === 0) {
      this._isMaxValid = true;
      return true;
    }

    if (+currentItem.maxSize <= +currentItem.minSize) {
      this._isMaxValid = false;
      return false;
    }
    if (this._isMaxValid) {
        this._isMaxValid = true;
    }
    return true;
}

对min有效的类似事情。 现在,如果您还想检查第一个元素,请检查item_IDX以及this._isMaxValid。例如:

isMaxValid(currentItem: any, item_IDX: number) {
    if (+currentItem.maxSize <= +currentItem.minSize) {
      this._isMaxValid = false;
      return false;
    }
    if (item_IDX === 0) {
        this._isMaxValid = true;
    }
    else if (this._isMaxValid) {
        this._isMaxValid = true;
    }
    return true;
}