篩選器不工作:錯誤無法讀取null的屬性“toLowerCase”

我有一個小的過濾搜索程序,我通過spring API從MySQL數(shù)據(jù)庫中提取數(shù)據(jù)。一切都很好,但是自從我在list-expense.component.ts中實現(xiàn)了filterExpenses()方法之后,我得到了一個錯誤

“TypeError:無法讀取null的屬性'toLowerCase'”

它指出錯誤在于:

return e.expense.toLowerCase().includes(this.filters.keyword.toLowerCase());

如何消除這個錯誤我沒有成功。

如果有人能幫我,我會很感激的。

expense.ts (service)

import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { Expense } from '../models/expense';
import { map } from 'rxjs/operators';
import { HttpClient } from '@angular/common/http';

@Injectable({
  providedIn: 'root',
})
export class ExpenseService {
  private getUrl: string = 'http://localhost:8080/api/v1/expenses';
  constructor(private httpClient: HttpClient) {}

  getExpenses(): Observable<Expense[]> {
    return this.httpClient
      .get<Expense[]>(this.getUrl)
      .pipe(map((response) => response));
  }

  getExpense(id: number): Observable<Expense> {
    return this.httpClient
      .get<Expense>(`${this.getUrl}/${id}`)
      .pipe(map((response) => response));
  }
}

list-expense.component.ts

import { HttpClient, HttpClientModule } from '@angular/common/http';
import { Component, OnInit } from '@angular/core';
import { Observable } from 'rxjs';
import { Expense } from 'src/app/models/expense';
import { ExpenseService } from 'src/app/services/expense.service';

@Component({
  selector: 'app-list-expense',
  templateUrl: './list-expense.component.html',
  styleUrls: ['./list-expense.component.css'],
})
export class ListExpenseComponent implements OnInit {
  filters = {
    keyword: '',
  };
  expenses: Expense[];
  constructor(private expenseService: ExpenseService) {}

  ngOnInit(): void {
    this.listExpenses();
  }

  listExpenses() {
    this.expenseService
      .getExpenses()
      .subscribe((data) => (this.expenses = this.filterExpenses(data)));
  }

  filterExpenses(expenses: Expense[]) {
    return expenses.filter((e) => {
      // Error on this line
      return e.expense
        .toLowerCase()
        .includes(this.filters.keyword.toLowerCase());
    });
  }
}

list-expense.component.html

<a routerLink="/addexpense">Add Expense</a>

<input type="text" [(ngModel)]="filters.keyword" name="keyword" (input)="listExpenses()">

<div *ngFor="let expense of expenses">
  <h3>{{expense.expense}}</h3>
  <h3>{{expense.amount | currency: 'CHF'}}</h3>

  <a routerLink="/editexpense/{{expense.id}}">Edit</a>
  <button (click)="deleteExpense(expense.id)">Delete</button>
</div>
<a routerLink="/addexpense">Add Expense</a>

<input type="text" [(ngModel)]="filters.keyword" name="keyword" (input)="listExpenses()">

<div *ngFor="let expense of expenses">
  <h3>{{expense.expense}}</h3>
  <h3>{{expense.amount | currency: 'CHF'}}</h3>

  <a routerLink="/editexpense/{{expense.id}}">Edit</a>
  <button (click)="deleteExpense(expense.id)">Delete</button>
</div>
? 最佳回答:

這很可能是因為數(shù)組中有一個對象的expensenull

所以考慮使用Typescript可選鏈接,這樣當(dāng)e.expensenull時,它就不會嘗試執(zhí)行toLowerCase()方法。

所以那條線應(yīng)該是這樣的

return e.expense?.toLowerCase().includes(this.filters.keyword.toLowerCase());

您也可以使用這樣一個簡單的if語句

filterExpenses(expenses: Expense[]) {
  return expenses.filter((e) => {
    if (!e.expense) {
      return;
    }
    return e.expense
      .toLowerCase()
      .includes(this.filters.keyword.toLowerCase());
  });
}
主站蜘蛛池模板: 亚洲一区二区三区成人网站 | 国产精品福利区一区二区三区四区| 亚洲AV日韩综合一区| 精品人妻少妇一区二区三区在线 | 精品一区高潮喷吹在线播放| 亚洲国产一区二区视频网站| 精品久久久中文字幕一区| 99精品一区二区免费视频| 亚洲色大成网站www永久一区| 国产一区二区三区在线免费观看| 国产日本亚洲一区二区三区| 亚洲线精品一区二区三区影音先锋| 夜精品a一区二区三区| 久久久av波多野一区二区| 中文字幕在线一区| 久久精品人妻一区二区三区| 国产免费av一区二区三区| 欧美日韩精品一区二区在线观看| 末成年女AV片一区二区| 另类一区二区三区| 无码人妻精品一区二区三区夜夜嗨| 日本午夜精品一区二区三区电影| 农村人乱弄一区二区| 久久亚洲日韩精品一区二区三区| 秋霞午夜一区二区| 亚洲熟妇av一区二区三区| 91久久精一区二区三区大全| 精品国产亚洲一区二区在线观看| 国产伦精品一区二区三区视频猫咪 | 国模无码视频一区二区三区| 亚洲日韩中文字幕无码一区| 无码中文人妻在线一区二区三区 | 三上悠亚亚洲一区高清| 国产精品毛片a∨一区二区三区| asmr国产一区在线| 上原亚衣一区二区在线观看| 久久se精品一区二区| 蜜臀AV一区二区| 国产福利在线观看一区二区 | 亚洲人成网站18禁止一区| 国产福利电影一区二区三区,亚洲国模精品一区 |