首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角2英雄之旅:过滤英雄的名字

角2英雄之旅:过滤英雄的名字
EN

Stack Overflow用户
提问于 2016-12-22 12:11:30
回答 1查看 1.8K关注 0票数 2

我跟随了“英雄之角2”之旅,目前我正处于这个阶段:

https://angular.io/docs/ts/latest/tutorial/toh-pt6.html

我可以在搜索栏中搜索,并给出一个英雄名字建议列表。

柱塞:https://angular.io/resources/live-examples/toh-6/ts/eplnkr.html

然而,我想要的是一个过滤器条,在那里我搜索,英雄块会根据过滤器栏中的内容自动过滤。

例如,在我提供的链接中,如果我在搜索栏中键入"Bo“,我只希望英雄块"Bombasto”显示在屏幕上。当我清除搜索栏时,所有的块都会重新出现。有人知道怎么做吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-22 12:37:10

看看我修改过的柱塞:https://plnkr.co/edit/YHzyzm6ZXt4ESr76mNuB?p=preview

  1. Pipe添加到dashboard.component.ts中
代码语言:javascript
复制
@Pipe({
  name: 'filterHeros'
})
export class FilterHeroPipe {
  public transform(heros: Hero[], filter: string) {
    if (!heros || !heros.length) return [];
    if (!filter) return heros;
    return heros.filter(h => h.name.toLowerCase().indexOf(filter.toLowerCase()) >= 0);
  }
}
  1. 在这个Pipe中使用dashboard.template
代码语言:javascript
复制
<h3>Top Heroes</h3>
<div class="grid grid-pad">
  <a *ngFor="let hero of (heroes | filterHeros : heroSearch.curSearch )"  [routerLink]="['/detail', hero.id]"  class="col-1-4">
    <div class="module hero">
      <h4>{{hero.name}}</h4>
    </div>
  </a>
</div>
<br />
<hero-search #heroSearch></hero-search>
  1. 更改HeroSearch组件:
代码语言:javascript
复制
  private searchTerms = new Subject<string>();
  public curSearch: string; // !! NEW !!

  constructor(
    private heroSearchService: HeroSearchService,
    private router: Router) {}

  // Push a search term into the observable stream.
  search(term: string): void {
    this.curSearch = term;  // !! NEW !!
    this.searchTerms.next(term);
  }
  1. 不要忘记将我们的Pipe添加到app.module中:
代码语言:javascript
复制
import { DashboardComponent, FilterHeroPipe }   from './dashboard.component';
import { HeroesComponent }      from './heroes.component';
import { HeroDetailComponent }  from './hero-detail.component';
import { HeroService }          from './hero.service';
import { HeroSearchComponent }  from './hero-search.component';

@NgModule({
  imports: [
    BrowserModule,
    FormsModule,
    HttpModule,
    InMemoryWebApiModule.forRoot(InMemoryDataService),
    AppRoutingModule
  ],
  declarations: [
    AppComponent,
    DashboardComponent,
    HeroDetailComponent,
    HeroesComponent,
    HeroSearchComponent,
    FilterHeroPipe
  ],
  providers: [ HeroService ],
  bootstrap: [ AppComponent ]
})
export class AppModule { }
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41282926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档