javascript - URL pentru construirea TypeScript cu argumente opționale
Încerc să construiesc un URL pentru a prelua date de la un serviciu REST, un URL valid ar trebui să arate astfel
http://SITENAME/api/get_posts/?count=5&page=1&post_type=galleryși am argumente precum count, page, post_type și altele.. acestea sunt argumente opționale și unul sau toate ar putea fi nule Am încercat următorul cod
var query = 'http://localhost/wptest/api/get_posts/?';
fetchData(countIn: int, pageIn: int, typeIn: string, query: string) {
if (this.countIn) //if count not null, add count parameter.
query = `${query}&count=${this.countIn}`;
if (this.pageIn)
query = `${query}&page=${this.pageIn}`;
if (this.typeIn)
query = `${query}&post_type=${this.typeIn}`;
return this.http.get(query).map(res => res.json());
}
acest cod urât returnează un URL invalid, când merg în debugger-ul Chrome => fila rețea găsesc:
totuși nu primesc o excepție, pentru că cumva URL-ul se repară și trimite o nouă cerere cu URL-ul valid:
problema este cu diferența dintre ?count=5&page=1 și ?&count=5&page=1
asta cauzând ca indicatorul de încărcare al filei să rămână blocat și să nu se termine niciodată.
Î: ce îmbunătățiri se pot face codului pentru a obține un URL valid?
Răspuns #1
Păstrând structura generală a codului tău actual, ai putea adăuga o variabilă care să fie setată cu '&' după prima utilizare a acesteia.
fetchData(countIn: int, pageIn: int, typeIn: string, query: string) {
var prepend = '';
if (this.countIn) {
query = `${query}` + prepend + `count=${this.countIn}`;
prepend = '&';
}
if (this.pageIn) {
query = `${query}` + prepend + `page=${this.pageIn}`;
prepend = '&';
}
if (this.typeIn) {
query = `${query}` + prepend + `post_type=${this.typeIn}`;
prepend = '&';
}
return this.http.get(query).map(res => res.json());
}
Există și alte moduri de a realiza ceea ce încerci să obții, dar aceasta este o modalitate de a face acest lucru.
Răspunsul #2
var params = [], // your params here
self = this;
[["count", "countIn"], ["page", "pageIn"], ["post_type", "postIn"]]
.forEach(function(param) {
if(self[param[1]]) params.push(param[0] + "=" + self[param[1]]);
});
var query = `${query}` + params.join("&");


