angular - Hur skickar jag en sökparameter till URL?
Jag skapade en metod i asp.net core web api som returnerar ett objekt som innehåller strängen jag skickar i URL:en.
Nu har jag ett sökformulär som borde skicka den strängen till URL:en och returnera de objekt som innehåller den.
Så här använder jag API:et:
import { Injectable } from "@angular/core";
import { ContactDetail } from "./contact-detail.model";
import { HttpClient } from "@angular/common/http";
@Injectable({
providedIn: "root"
})
export class ContactDetailService {
formData: ContactDetail;
readonly rootURL = "http://localhost:60809/api";
list: ContactDetail[];
constructor(private http: HttpClient) {}
// search contacts
searchContactDetail(keyword: string) {
return this.http
.get(this.rootURL + "/ContactDetail/Search/" + keyword)
.toPromise()
.then(res => (this.list = res as ContactDetail[]));
}
Detta är sökformuläret:
<form
class="form-inline"
#form="ngForm"
autocomplete="off"
(submit)="searchContact(keyword)"
>
<input
name="keyword"
class="form-control mr-sm-2"
type="search"
placeholder="Search"
aria-label="keyword"
/>
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">
Search
</button>
</form>
Och hur jag skickar strängen:
searchContact(keyword: string) {
this.service.searchContactDetail(keyword);
}
Även formuläret och tabellen som returnerar resultatet är inte i samma komponent om det spelar någon roll.
Vad jag får nu när jag söker skickar det rootURL/search/undefined. Så vad jag än skriver skickar det undefined.
Svar #1
Det beror på att du har infogat fel parameter i form.(submit).
Ändra detta:
<form
class="form-inline"
#form="ngForm"
autocomplete="off"
(submit)="searchContact(keyword)"
>
<input
name="keyword"
class="form-control mr-sm-2"
type="search"
placeholder="Search"
aria-label="keyword"
/>
Till detta:
<form
class="form-inline"
autocomplete="off"
(ngSubmit)="searchContact(keyword.value)"
>
<input
name="keyword"
class="form-control mr-sm-2"
type="search"
placeholder="Search"
aria-label="keyword"
#keyword
/>
Det jag gjorde var:
Att ändra
(submit)-händelsen till(ngSubmit)vilket på ett sätt hindrar webbläsaren från det vanliga beteendet att skicka en GET-begäran.binder en variabel som heter
keyboardtillinput[name="keyword"]och sedan skickar dess värde ingSubmit.
Ett fungerande exempel - https://stackblitz.com/edit/angular-f8s8zf
