【问题标题】:Error Cannot set property 'filterPredicate' of undefined in Angular Material错误无法在 Angular 材质中设置未定义的属性“filterPredicate”
【发布时间】:2020-07-15 10:07:11
【问题描述】:

我正在对表实现过滤功能,并且在调试时遇到以下错误。

core.js:6228 ERROR TypeError: Cannot set property 'filterPredicate' of undefined
    at new IssuedLicenseListComponent

已经声明了listData,它是一个MatTableDataSource,它具有filterPredicate 属性,这可能是什么问题?

型号

export interface LicenseIssued {
  issue_date: Date;
  valid_from: Date;
  expiry_date: Date;
  amount_paid: any;
  receipt_no: any;

}

这是组件中的代码

.....
  listData: MatTableDataSource<LicenseIssued>;

  get fromDate() { return this.filterForm.get('fromDate').value; }
  get toDate() { return this.filterForm.get('toDate').value; }

  constructor(
    private apiService: ApiService,
    private dialog: MatDialog,
    private spinner: NgxSpinnerService,
    private dataService: DataService,
    private route: Router,

    ) {

      this.pipe = new DatePipe('en');
      this.listData.filterPredicate = (data, filter) =>{
        if (this.fromDate && this.toDate) {

          console.log('filtered')
          console.log(data)
          console.log(data.issue_date)
          return data.issue_date >= this.fromDate && data.issue_date <= this.toDate;
        }
        return true;
      }


    }

  ngOnInit() {

    this.getAllIssuedLicenses();

    /** spinner starts on init **/

    this.spinner.show();
    /** spinner starts afer 5 secs**/
    setTimeout(() => {
      this.spinner.hide();

    }, 7000);
  }


  getAllIssuedLicenses() {
    this.liquorService.getAllIssuedLicenses().subscribe(
      res => {
        console.log(res)
        this.listData = new MatTableDataSource(res.data);
      },

      error => {
        console.log(error);
      }
    );

    this.listData.sort = this.sort;

    const sortState: Sort = {active: 'id', direction: 'desc'};
    this.sort.active = sortState.active;
    this.sort.direction = sortState.direction;
    this.sort.sortChange.emit(sortState);

    this.listData.paginator = this.paginator;
  }

   applyFilter() {
    this.listData.filter = ''+Math.random();
  }

【问题讨论】:

    标签: angular asynchronous angular-material observable


    【解决方案1】:

    如下声明listData

    listData = new MatTableDataSource();
    

    【讨论】:

    • 现在没问题,但过滤器不起作用我得到空结果
    • create stackblitz of you issue,我可以检查,您将问题发布为 filterPredicate undefined。
    • 在 filterPredicate 中需要设置过滤器。参见代码 this.dataSource.filterPredicate = (data: any, filter: string) => !filter || data.level == 过滤器;要进行过滤,您需要执行以下代码 filterSearch(level) { this.dataSource.filter = level; }
    • 如果给定的答案适用于未定义问题的“filterPredicate”。请点赞并接受。
    • 我正在跟进这个示例,它运行良好,与我的代码的不同之处在于我从服务获取数据(它不是硬编码的)。这是链接stackblitz.com/edit/…
    猜你喜欢
    • 1970-01-01
    • 2018-07-06
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 2019-04-20
    • 2017-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多