0
Hello, I’m having a hard time finding a solution to my problem so I’m here, I’m trying to create a search field on my page, it’s not doing the research, but it’s not returning any errors in the build or console, then I’m lost if I forgot some step or import of some module, I don’t know, help me please, follow the code:
servicos.service.ts
import {HttpClient, HttpParams} from '@angular/common/http';
import {Injectable} from '@angular/core';
import {Observable} from 'rxjs';
import {Servico} from './servico/servico.model';
import {AUTONOMOUS_API} from '../app.api';
@Injectable()
export class ServicosService {
constructor(private http: HttpClient) {}
servicos(search?: string): Observable<Servico[]> {
let params: HttpParams;
if (search) {
params = new HttpParams().append('q', search);
}
return this.http.get<Servico[]>(`${AUTONOMOUS_API}/autonomos/`, {params: params});
}
servicosById(id: string): Observable<Servico> {
return this.http.get<Servico>(`${AUTONOMOUS_API}/autonomos/${id}/`);
}
}
servicos.component.html
<div class="container">
<div class="header-content" align="center">
<h1>Catálogo de Serviços</h1>
<br>
<mdc-form-field [formGroup]="searchForm" fluid class="form">
<mdc-text-field formControlName="searchControl" outlined label="Pesquisar" [mdcElevation]="3">
<mdc-icon mdcTextFieldIcon leading>search</mdc-icon>
</mdc-text-field>
</mdc-form-field>
</div>
<div class="row">
<div *ngFor="let servico of servicos" class="col-sm-4 col-xs-12">
<app-servico [servico]="servico"></app-servico>
</div>
</div>
</div>
servicos.component.ts
import { Component, OnInit } from '@angular/core';
import {Servico} from './servico/servico.model';
import {ServicosService} from './servicos.service';
import {FormBuilder, FormControl, FormGroup} from '@angular/forms';
import {catchError, debounceTime, distinctUntilChanged, switchMap} from 'rxjs/operators';
import {from} from 'rxjs';
@Component({
selector: 'app-servicos',
templateUrl: './servicos.component.html',
styleUrls: ['./servicos.component.scss']
})
export class ServicosComponent implements OnInit {
servicos: Servico[];
searchForm: FormGroup;
searchControl: FormControl;
constructor(private servicosService: ServicosService,
private fb: FormBuilder) { }
ngOnInit() {
this.searchControl = this.fb.control('');
this.searchForm = this.fb.group({
searchControl: this.searchControl
});
this.searchControl.valueChanges
.pipe(
debounceTime(500),
distinctUntilChanged(),
switchMap(searchTerm => this.servicosService.servicos(searchTerm)
.pipe(
catchError(error => from([]))
)
)
).subscribe(dados => this.servicos = dados);
this.servicosService.servicos().subscribe(dados => this.servicos = dados);
}
}
app.modulets.
My app.module is great so I’ll send the main ones to Reactiveforms
// DEFAULT
import { NgModule } from '@angular/core';
import {CommonModule, HashLocationStrategy, LocationStrategy} from '@angular/common';
// COMPONENTS
import { AppComponent } from './app.component';
import { DialogLoginComponent } from './dialog-login/dialog-login.component';
import { DialogContateComponent } from './dialog-contate/dialog-contate.component';
// SERVICES
import {ServicosService} from './servicos/servicos.service';
// REACTIVE FORMS
import {FormsModule, ReactiveFormsModule} from '@angular/forms';
@NgModule({
. . .
imports: [
CommonModule,
FormsModule,
ReactiveFormsModule
],
providers: [
ServicosService,
{provide: LocationStrategy, useClass: HashLocationStrategy},
],
entryComponents: [
DialogLoginComponent,
DialogContateComponent
],
bootstrap: [AppComponent]
})
export class AppModule { }
servicos.component.ts (UPDATED)
import { Component, OnInit } from '@angular/core';
import {Servico} from './servico/servico.model';
import {ServicosService} from './servicos.service';
import {FormBuilder, FormControl, FormGroup} from '@angular/forms';
import {catchError, debounceTime, distinctUntilChanged, switchMap} from 'rxjs/operators';
import {from} from 'rxjs';
@Component({
selector: 'app-servicos',
templateUrl: './servicos.component.html',
styleUrls: ['./servicos.component.scss']
})
export class ServicosComponent implements OnInit {
servicos: Servico[];
searchForm = new FormGroup({
searchControl: new FormControl('')
});
constructor(private servicosService: ServicosService,
private fb: FormBuilder) { }
ngOnInit() {
this.searchForm = this.fb.group({
searchControl: ['']
});
this.searchForm.get('searchControl').valueChanges
.pipe(
debounceTime(500),
distinctUntilChanged(),
switchMap(searchTerm =>
this.servicosService.servicos(searchTerm)
.pipe(
catchError(error => from([]))
)
)
).subscribe(dados => this.servicos = dados);
this.servicosService.servicos().subscribe(dados => this.servicos = dados);
}
}
Look at the end of the post already updated, does not work yet.
– Patrick Amaral