【问题标题】:Object Property named with ? not working inside map in Angular以 ? 命名的对象属性不能在 Angular 中的地图内部工作
【发布时间】:2021-10-05 21:20:11
【问题描述】:

我是 Angular 的新手,job.job_company_companyNamethe job.job_company.locationjob.jobTitle,它们都工作/可以基于过滤器进行搜索:但是当我添加带有问号的 Jobs 对象时 (? ) 例如:job.job_details?.jobCountryjob.job_details?.jobCity? 它们没有被过滤,除了下面的两行之外,上面的 3 行正在被过滤。你认为我应该怎么做才能让这件事发挥作用?改变什么为什么带问号的属性不能正常工作。有任何想法吗?将不胜感激!

这是我的 search.component.ts

this.filteredList$ = combineLatest(this.list$, this.filter$).pipe(
  map(([jobs, filterString]) =>jobs.filter(job => 
    job.job_company.companyName.toLowerCase().indexOf(filterString.toLowerCase()) !== -1 ||
    job.jobTitle.toLowerCase().indexOf(filterString.toLowerCase()) !== -1 ||
    job.job_company.location.toLowerCase().indexOf(filterString.toLowerCase()) !== -1 ||
    job.job_details?.jobCountry.toLowerCase().indexOf(filterString.toLowerCase()) !== -1 ||
    job.job_details?.jobCity?.toLowerCase().indexOf(filterString.toLowerCase()) !== -1 
    )),
  tap(filtered => {
    this.allJobs = filtered;
    return this.jobsChunk = filtered.slice(0, 9)
  })
);

这里jobs.model.ts

export interface Jobs {
  jobsId: string;
  jobTitle: string;
  job_details?: JobDetails;
  job_package: JobPackage;
  job_status: JobStatus;
  job_company: CompanyProfile;
  createdDate?: string;
}

export interface JobDetails {
  jobCity?: string;
  jobCountry: string;
  jobType: string;
  jobCategory: string;
  jobTags: string[];
  jobDescription: string;
}

export interface CompanyProfile {
  companyName: string;
  location: string; 
}

【问题讨论】:

  • 你能准确描述什么不起作用吗?并且最好知道您正在执行此地图功能的数据。
  • 您好西蒙,感谢您的回复。我编辑了内容,但不起作用的是当我添加行 job_details 时它的过滤不起作用?其中明显有问号?我想知道为什么当我添加两行时过滤不起作用并且过滤器也不能与带有问号的属性一起使用。

标签: angular angular-maps


【解决方案1】:

在这种情况下,您对条件实现有疑问:

job.job_details?.jobCity?.toLowerCase().indexOf(filterString.toLowerCase()) !== -1

如果 job_detailsjobCity 未定义,则比较将是 undefined !== -1,它将是 true

一种简单的方法是使用> -1 代替!== -1 条件。

或者检查之前的属性:

job.job_details?.jobCity && job.job_details.jobCity.toLowerCase().indexOf(filterString.toLowerCase()) !== -1

【讨论】:

  • 您好!感谢克里斯蒂安的反馈。我只使用job.job_details?.jobCountry 解决了我的这个问题.. 城市和国家都可以通过这个搜索.. 没有像job.job_details?.jobCountry.indexOf(filterString.toLowerCase())... 这样的扩展名它只能通过使用这个job.job_details?.jobCountry
  • 但是成功的人!哦,非常感谢!我也在国内试过了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-04
  • 2019-08-13
  • 2020-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多