【发布时间】:2021-08-14 01:33:02
【问题描述】:
我大多是 Angular 的新手。我有一个包含帖子列表的页面。我想用搜索框过滤帖子列表,但输入字段没有过滤数据。我不能使用 ngModel,因为我使用的是反应式表单。我认为这与视图中的输入有关。我真的不知道该怎么办了。这是我的代码。
<div class="b-posts">
<form class="b-form" (ngSubmit)="onSubmit(this.postForm.value)" [formGroup]="postForm">
<div class=" b-form__group form-group">
<span class="b-form__circle"></span>
<input type="text" name="post" placeholder="Type" class="b-form__input form-control"
formControlName="text">
</div>
<div class="b-form__filter form-group">
<input type="text" formControlName="search">
</div>
</form>
<div *ngFor="let post of filteredPosts">
{{post.text}}
</div>
<div class="b-post" *ngFor="let post of posts">
<div class="b-post__main">
<div class="b-post__info">
<span class="b-post__circle"></span>
<div>
<p class="b-post__p">{{post.name}}</p>
<p class="b-post__time">{{post.time}}</p>
</div>
</div>
<div class="b-post__dots"></div>
</div>
<div>
<p class="b-post__text">{{post.text}}</p>
</div>
</div>
</div>
The component.ts
@Component({
selector: 'app-posts-list',
templateUrl: './posts-list.component.html',
styleUrls: [ './posts-list.component.scss' ]
})
export class PostsListComponent implements OnInit {
posts: Post[];
filteredPosts: Post[];
private _search: string;
get search(): string {
return this._search;
}
set search(value: string) {
this._search = value;
this.filteredPosts = this.filter(value);
}
postForm = this.formBuilder.group({
id: [],
name: [ 'ImePrezime' ],
time: [],
text: [ '' ],
search: []
});
constructor(
private formBuilder: FormBuilder,
) {}
ngOnInit(): void {
this.postListService.getPosts().subscribe((post) => {
this.posts = post;
});
this.filteredPosts = this.posts;
}
filter(data: string) {
return this.posts.filter((post) => post.text.toLowerCase().indexOf(data.toLowerCase()) !== -1);
}
}
【问题讨论】:
标签: angular filter angular-reactive-forms