Mig*_*ada 243 http typescript angular
大家好我在Angular上创建HTTP请求,但我不知道如何添加url参数(查询字符串).
this.http.get(StaticSettings.BASE_URL).subscribe(
(response) => this.onGetForecastResult(response.json()),
(error) => this.onGetForecastError(error.json()),
() => this.onGetForecastComplete()
);
Run Code Online (Sandbox Code Playgroud)
现在我的StaticSettings.BASE_URL就像一个没有查询字符串的网址,如:http://atsomeplace.com/ 但我希望它是http://atsomeplace.com/?var1=val1&var2=val2
哪个var1和var2适合我的Http请求对象?我想像对象一样添加它们.
{
query: {
var1: val1,
var2: val2
}
}
Run Code Online (Sandbox Code Playgroud)
然后只是Http模块完成工作将其解析为URL查询字符串.
tos*_*skv 311
该HttpClient的方法允许您设置PARAMS在它的选项.
您可以通过从@ angular/common/http包导入HttpClientModule来配置它.
import {HttpClientModule} from '@angular/common/http';
@NgModule({
imports: [ BrowserModule, HttpClientModule ],
declarations: [ App ],
bootstrap: [ App ]
})
export class AppModule {}
Run Code Online (Sandbox Code Playgroud)
之后,您可以注入HttpClient并使用它来执行请求.
import {HttpClient} from '@angular/common/http'
@Component({
selector: 'my-app',
template: `
<div>
<h2>Hello {{name}}</h2>
</div>
`,
})
export class App {
name:string;
constructor(private httpClient: HttpClient) {
this.httpClient.get('/url', {
params: {
appid: 'id1234',
cnt: '5'
},
observe: 'response'
})
.toPromise()
.then(response => {
console.log(response);
})
.catch(console.log);
}
}
Run Code Online (Sandbox Code Playgroud)
对于版本4之前的角度版本,您可以使用Http服务执行相同的操作.
该Http.get方法需要实现一个目的RequestOptionsArgs作为第二参数.
该对象的搜索字段可用于设置字符串或URLSearchParams对象.
一个例子:
// Parameters obj-
let params: URLSearchParams = new URLSearchParams();
params.set('appid', StaticSettings.API_KEY);
params.set('cnt', days.toString());
//Http request-
return this.http.get(StaticSettings.BASE_URL, {
search: params
}).subscribe(
(response) => this.onGetForecastResult(response.json()),
(error) => this.onGetForecastError(error.json()),
() => this.onGetForecastComplete()
);
Run Code Online (Sandbox Code Playgroud)
Http类的文档有更多细节.它可以发现这里和工作的例子在这里.
Rad*_*FID 155
HttpClient已与HttpParams一起推出.下面是一个使用示例:
import { HttpParams, HttpClient } from '@angular/common/http';
constructor(private http: HttpClient) { }
let params = new HttpParams();
params = params.append('var1', val1);
params = params.append('var2', val2);
this.http.get(StaticSettings.BASE_URL, {params: params}).subscribe(...);
Run Code Online (Sandbox Code Playgroud)
(老答案)
requestOptions.search
已被弃用.requestOptions.params
改为使用:
let requestOptions = new RequestOptions();
requestOptions.params = params;
Run Code Online (Sandbox Code Playgroud)
您需要导入URLSearchParams
如下
import { Http, RequestOptions, URLSearchParams } from '@angular/http';
Run Code Online (Sandbox Code Playgroud)
然后构建您的参数并按如下方式生成http请求:
let params: URLSearchParams = new URLSearchParams();
params.set('var1', val1);
params.set('var2', val2);
let requestOptions = new RequestOptions();
requestOptions.search = params;
this.http.get(StaticSettings.BASE_URL, requestOptions)
.toPromise()
.then(response => response.json())
...
Run Code Online (Sandbox Code Playgroud)
Rah*_*h M 57
使用Angular 5及更高版本,您不必使用HttpParams.您可以直接发送您的json对象,如下所示.
let data = {limit: "2"};
this.httpClient.get<any>(apiUrl, {params: data});
Run Code Online (Sandbox Code Playgroud)
请注意,数据值应为字符串,即; { params: {limit: "2"}}
使用来自@ angular/common/http的HttpParams,HttpClient
import { HttpParams, HttpClient } from '@angular/common/http';
...
constructor(private httpClient: HttpClient) { ... }
...
let params = new HttpParams();
params = params.append("page", 1);
....
this.httpClient.get<any>(apiUrl, {params: params});
Run Code Online (Sandbox Code Playgroud)
可能会帮助一些!
小智 12
Angular 6
您可以使用params传入get调用所需的参数:
this.httpClient.get<any>(url, { params: x });
Run Code Online (Sandbox Code Playgroud)
其中x = {property:"123"}.
至于记录"123"的api函数:
router.get('/example', (req, res) => {
console.log(req.query.property);
})
Run Code Online (Sandbox Code Playgroud)
我的例子
private options = new RequestOptions({headers: new Headers({'Content-Type': 'application/json'})});
Run Code Online (Sandbox Code Playgroud)
我的方法
getUserByName(name: string): Observable<MyObject[]> {
//set request params
let params: URLSearchParams = new URLSearchParams();
params.set("name", name);
//params.set("surname", surname); for more params
this.options.search = params;
let url = "http://localhost:8080/test/user/";
console.log("url: ", url);
return this.http.get(url, this.options)
.map((resp: Response) => resp.json() as MyObject[])
.catch(this.handleError);
}
private handleError(err) {
console.log(err);
return Observable.throw(err || 'Server error');
}
Run Code Online (Sandbox Code Playgroud)
在我的组件中
userList: User[] = [];
this.userService.getUserByName(this.userName).subscribe(users => {
this.userList = users;
});
Run Code Online (Sandbox Code Playgroud)
邮差
http://localhost:8080/test/user/?name=Ethem
Run Code Online (Sandbox Code Playgroud)
在最新的 Angular 7/8 中,您可以使用最简单的方法:-
import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
getDetails(searchParams) {
const httpOptions = {
headers: { 'Content-Type': 'application/json' },
params: { ...searchParams}
};
return this.http.get(this.Url, httpOptions);
}
Run Code Online (Sandbox Code Playgroud)
如果您打算发送多个参数.
private options = {
sort: '-id',
select: null,
limit: 1000,
skip: 0,
from: null,
to: null
};
constructor(private service: Service) { }
ngOnInit() {
this.service.getAllItems(this.options)
.subscribe((item: Item[]) => {
this.item = item;
});
}
Run Code Online (Sandbox Code Playgroud)
private options = new RequestOptions({headers: new Headers({'Content-Type': 'application/json'})});
constructor(private http: Http) { }
getAllItems(query: any) {
let params: URLSearchParams = new URLSearchParams();
for(let key in query){
params.set(key.toString(), query[key]);
}
this.options.search = params;
this.header = this.headers();
Run Code Online (Sandbox Code Playgroud)
并继续你的http请求@ethemsulan如何做.
router.get('/api/items', (req, res) => {
let q = {};
let skip = req.query.skip;
let limit = req.query.limit;
let sort = req.query.sort;
q.from = req.query.from;
q.to = req.query.to;
Items.find(q)
.skip(skip)
.limit(limit)
.sort(sort)
.exec((err, items) => {
if(err) {
return res.status(500).json({
title: "An error occurred",
error: err
});
}
res.status(200).json({
message: "Success",
obj: items
});
});
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
373835 次 |
最近记录: |