angular - Http-parametrar läggs inte till i GET-förfrågan


app.module.ts

getHttpParams = () => {
    const httpParams = new HttpParams();
    console.log(this.userForm.controls)
    Object.keys(this.userForm.controls).forEach(key => {
        console.log(this.userForm.get(key).value)
        const value = this.userForm.get(key).value;
        if (value){
            console.log('keyvalue' + httpParams.append(key, value)) ==> It Showing corrrect value
            httpParams.append(key, value);      ==> HttpParams map return null
            console.log(httpParams)
        }
    });
    return httpParams;
}

onSubmit() {
    this.router.queryParams.subscribe(params => {
        let opts = { params: this.getHttpParams() }
        console.log(opts)

        this.http.get<User>(`${this.serverUrl}`, opts).subscribe(
            res => {
                this.user = res
                console.log(res)
            }
        ),
        console.log(params);
    })
}

När getHttpParams-funktionen anropas får den korrekt värde men httpParams.append returnerar null i httpParams-kartan. Kan någon hjälpa mig??

Svar #1

HttpParams append-metoden kommer att returnera en ny kropp med det tillagda värdet.

getHttpParams = () => {
let httpParams = new HttpParams();
Object.keys(this.userForm.controls).forEach(key => {
  const value = this.userForm.get(key).value;
  if (value){
    httpParams = httpParams.append(key, value); // 👈
    console.log(httpParams)
  }

});
return httpParams;
}

läs den här artikeln Skapa en URL med HttpParams i Angular för mer information

Svar #2

Du kan enkelt skapa ett HttpParams-objekt från ett annat objekt, se nedan:

getHttpParams = () => new HttpParams({ fromObject: this.userForm.value });

Enkelt och elegant!