Мой фильтр показывает неопределенное значение после очистки поля

#angular #angular-material

Вопрос:

введите описание изображения здесь

  

    <ng-template mat-tab-label>
                    <div class="input-group">
                        <div class="m-input-icon m-input-icon--right w-100">
                            <input **#searchVal** class="form-control m-input"
                                [placeholder]="tabIndex < 1 ? 'Search Customer, Building, Shift, Department, Lead' : 'Search Employee Name, Customer,Building, Shift, Department'"
                                type="text" [value]="query" (keyup)="onSearch($event)">
                            <span class="m-input-icon__icon m-input-icon__icon--right">
                                <span **[![*ngIf="!searchVal.value"][1]][1]**><i class="la flaticon-search-1"></i></span>
                                <mat-icon *ngIf="searchVal.value" class="clear-icon" (click)="onSearch($event);searchVal.value = ''; query = '';">
                                    clear
                                </mat-icon>
                            </span>
    
                        </div>
                    </div>
                </ng-template>

 

когда я ищу значение после очистки фильтра ,оно выдает ошибку, называемую

ОШИБКА Ошибка: ExpressionChangedAfterItHasBeenCheckedError: Выражение изменилось после проверки. Предыдущее значение: «ngIf: true». Текущее значение: «ngIf: ложь».

У кого-нибудь есть идея, пожалуйста, дайте мне знать,

Насколько я понимаю ,при обнаружении изменений во второй раз значение поиска изменилось ,и я использовал условие, выделенное жирным шрифтом.

 import { ChangeDetectorRef, Component, OnInit, TemplateRef, ViewChild } from '@angular/core';
import { Router } from '@angular/router';
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
import { format } from 'date-fns';
import { Subject, Subscription } from 'rxjs';
import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
import { AlertService } from 'src/app/core/services/alert.service';
import { AuthServices } from 'src/app/core/services/auth.service';
import { BreadcrumbService } from 'src/app/core/services/breadcrumb.service';
import { UserServices } from 'src/app/core/services/user.service';
import { abbvStates, cities } from 'src/app/shared/stateCityList';
import { SelectLayoutComponent } from '../entry-component/select-layout/select-layout.component';
import * as jsPDF from 'jspdf';
import 'jspdf-autotable';
import * as XLSX from 'xlsx';
import { Location } from '@angular/common';
import { LumperSheetFilters } from 'src/app/shared/entry-components/modal-object/reports/lumper-sheet-filters';
import { DEPARTMENTS } from 'src/app/shared/utility/departments';

@Component({
  selector: 'app-time-clock-reports',
  templateUrl: './time-clock-reports.component.html',
  styleUrls: ['./time-clock-reports.component.scss']
})
export class TimeClockReportsComponent implements OnInit {
  isLoading: boolean = false;
  currentRole: string;
  checkselection: string = 'pdf';
  cityType: string = '';
  stateType: string = '';
  cities: any[] = cities;
  states: any[] = abbvStates;
  customerIds = [];
  buildingIds = [];
  roleType: string = '';
  filteredCities: any = [];
  query: string = '';
  department = '';
  shift = '';
  buildings = [];
  departmentOptions = DEPARTMENTS;
  rolesType = [
    { viewValue: 'District Manager', value: 'district_manager' },
    { viewValue: 'Lumper', value: 'lumper' },
    { viewValue: 'Lead', value: 'lead' },
  ];
  subscriptions: Subscription[] = [];
  searchData1$: Subject<string> = new Subject<string>();
  tabIndex = 0;
  checked: any[] = [];
  date: any = new Date();
  selectedFromDate: any;
  selectedToDate: any;
  selectShiftDepartment: boolean = false;
  alreadySelected: string[] = ['Customer', 'Buildings', 'Managers', 'Supervisors', 'Active Since'];
  parameters: string[] = ['Customer', 'Buildings', 'Managers', 'Supervisors', 'Active Since'];
  sheetsData: any;
  buildingId: string;
  customers = [];

  constructor(
    private location: Location,
    private router: Router,
    private breadcrumbService: BreadcrumbService,
    private authService: AuthServices,
    private userService: UserServices,
    private alertService: AlertService
  ) { }

  ngOnInit() {
  }

 

// this is the search function that gets called on clearing the input through clear icon

  **onSearch(event) {
    event.stopPropagation();
    let val = event.target.value;
    if (event.keyCode == 32) {
      val = val   ' ';
      this.searchData1$.next(val);
    } else this.searchData1$.next(val);
  }**

 
  back() {
    this.location.back();
  }



}



 

Комментарии:

1. какое значение вы ожидали получить, нажав на значок очистить ?

2. я хочу, чтобы здесь было пусто, это показывает мне, что определено

3. попробуйте выбрать пустую searchVal.value = '' внутреннюю функцию поиска, а не событие щелчка по значку в html.

Ответ №1:

 let val = event.target.value ? event.target.value : ' ';
 

вам нужно проверить наличие нулевого value значения event.target