微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在表单提交时滚动到第一个 ng-invalid 类

如何解决如何在表单提交时滚动到第一个 ng-invalid 类

我有一个看起来像这样的表格。我只希望用户在提交表单时滚动到第一个 ng-invalid 类。我如何使用 angular 的方式实现这一点。

          <div class="addressFormUI-base-formHeader">
            {{ "CONTACT DETAILS" | translate }}
          </div>
          <div class="addressFormUI-base-form addressList-base-removeMargin">
            <div class="inputV2-base-inputRow addressFormUI-base-inputRow">
              <mat-form-field
                floatLabel="auto"
                class="input-w"
                appearance="outline"
              >
                <mat-label>{{ "Name" | translate }}*</mat-label>

                <input
                  matInput
                  placeholder="{{ 'Name' | translate }}*"
                  formControlName="full_name"
                />
              </mat-form-field>
            </div>
            <div class="inputV2-base-inputRow">
              <mat-form-field
                floatLabel="auto"
                class="input-w"
                appearance="outline"
              >
                <mat-label>{{ "Mobile No" | translate }}*</mat-label>

                <input
                  formControlName="mobile"
                  matInput
                  placeholder="Mobile No"
                />
              </mat-form-field>
            </div>
          </div>
          <div class="addressFormUI-base-formHeader">
            {{ "ADDRESS" | translate }}
          </div>
          <div class="addressFormUI-base-form addressList-base-removeMargin">
            <div class="addressFormUI-base-pincodeBlock">
              <div class="addressFormUI-base-inputContainer">
                <mat-form-field
                  floatLabel="auto"
                  class="input-w"
                  appearance="outline"
                >
                  <mat-label
                    >{{
                      "Street Address,P.O Box,Company Name,C/O" | translate
                    }}*</mat-label
                  >

                  <input
                    formControlName="address"
                    matInput
                    placeholder="{{
                      'Street Address,C/O' | translate
                    }}*"
                  />
                </mat-form-field>
              </div>
            </div>
            <div class="inputV2-base-inputRow addressFormUI-base-inputRow">
              <mat-form-field
                floatLabel="auto"
                class="input-w"
                appearance="outline"
              >
                <mat-label
                  >{{
                    "Apartment,Suite,Unit,Building,flour etc" | translate
                  }}.</mat-label
                >

                <input
                  matInput
                  formControlName="address_1"
                  placeholder="{{
                    'Apartment,flour,etc' | translate
                  }}."
                />
              </mat-form-field>
            </div>
            <div class="localityOptions-base-localityBlock" tabindex="-1">
              <div class="inputV2-base-inputRow">
                <mat-form-field
                  floatLabel="auto"
                  class="input-w"
                  appearance="outline"
                >
                  <mat-label>{{ "Locality / Town" | translate }}</mat-label>

                  <input
                    matInput
                    formControlName="landmark"
                    placeholder="{{ 'Locality / Town' | translate }}"
                  />
                </mat-form-field>
              </div>
            </div>
            <div class="addressFormUI-base-cityContainer">
              <div class="inputV2-base-inputRow addressFormUI-base-halfWidth">
                <mat-form-field
                  floatLabel="auto"
                  class="input-w"
                  appearance="outline"
                >
                  <mat-label>{{ "Country" | translate }}*</mat-label>

                  <input
                    formControlName="country_id"
                    matInput
                    placeholder="{{ 'Country' | translate }}*"
                  />
                </mat-form-field>
              </div>
              <div class="inputV2-base-inputRow addressFormUI-base-halfWidth">
                <mat-form-field
                  floatLabel="auto"
                  class="input-w"
                  appearance="outline"
                >
                  <mat-label>{{ "State / Province" | translate }}*</mat-label>

                  <input
                    matInput
                    formControlName="state_id"
                    placeholder="{{ 'State / Province' | translate }}*"
                  />
                </mat-form-field>
              </div>
            </div>
            <div class="addressFormUI-base-cityContainer">
              <div class="inputV2-base-inputRow addressFormUI-base-halfWidth">
                <mat-form-field
                  floatLabel="auto"
                  class="input-w"
                  appearance="outline"
                >
                  <mat-label>{{ "City" | translate }}*</mat-label>

                  <input
                    formControlName="city"
                    matInput
                    placeholder="{{ 'City' | translate }}*"
                  />
                </mat-form-field>
              </div>
              <div class="inputV2-base-inputRow addressFormUI-base-halfWidth">
                <mat-form-field
                  floatLabel="auto"
                  class="input-w"
                  appearance="outline"
                >
                  <mat-label>{{ "Zip code" | translate }}*</mat-label>

                  <input
                    formControlName="zip_code"
                    matInput
                    placeholder="{{ 'Zip code' | translate }}*"
                  />
                </mat-form-field>
              </div>
            </div>
          </div>
          <div class="addressFormUI-base-formHeader">
            {{ "SCHEDULE AVAILABILTIY" | translate }}
          </div>

          <div class="addressFormUI-base-form addressList-base-removeMargin">
            <div
              class="addressFormUI-base-cityContainer"
              *ngFor="let item of availability; let i = index"
            >
              <div class="inputV2-base-inputRow" style="width: 30%">
                <mat-form-field
                  floatLabel="auto"
                  class="input-w"
                  appearance="outline"
                >
                  <mat-label>{{ "WeekDay" | translate }}</mat-label>

                  <input
                    matInput
                    type="text"
                    [value]="item?.day"
                    disabled
                    placeholder="{{ 'Weekday' | translate }}"
                  />
                </mat-form-field>
              </div>
              <div class="inputV2-base-inputRow halfWidth">
                <mat-form-field
                  floatLabel="auto"
                  class="input-w"
                  appearance="outline"
                >
                  <mat-label>{{ "Time" | translate }}</mat-label>

                  <input
                    [ngModelOptions]="{ standalone: true }"
                    [value]="availability[i].opening_time"
                    [(ngModel)]="availability[i].opening_time"
                    matInput
                    type="time"
                    format="g:ia"
                    placeholder="{{ 'Time' | translate }}"
                  />
                </mat-form-field>
              </div>

              <div class="inputV2-base-inputRow halfWidth">
                <mat-form-field
                  floatLabel="auto"
                  class="input-w"
                  appearance="outline"
                >
                  <mat-label>{{ "Time" | translate }}</mat-label>

                  <input
                    matInput
                    [ngModelOptions]="{ standalone: true }"
                    type="time"
                    placeholder="{{ 'Time' | translate }}"
                    [value]="availability[i].closing_time"
                    [(ngModel)]="availability[i].closing_time"
                  />
                </mat-form-field>
              </div>
            </div>
          </div>
          <button type="submit">
            {{ "Add address" | translate }}
          </button>
        </form> 

这是我的提交功能的样子:

submit(): void {
    this.submitted = true;
    if (this._form.invalid) {
      return;
    }
    if (this.updateid) {
      var api = 'address/update/' + this.updateid;
    } else {
      var api = 'address/create';
    }
    this._form.value.availablity = this.availability;
    this.loading = true;
    this.unsubscribe$.add(
      this.request.POST(api,this._form.value).subscribe(
        (response) => {
          this.loading = false;
          if (response['status']) {
            this.snack.notify(response.message,2);
          } else {
            this.snack.notify(response.message,2);
          }
        },(err) => {
          this.loading = false;
          this.snack.notify(err.message,2);
        }
      )
    );
  } 

我在我的应用程序中使用服务器端渲染。我应该使用 elementRef 来实现这一点还是 viewchild 哪个更好? 另外我如何使用 renderer2 实现这一点?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。