То, что ngOninit()
вызывается дважды, - это другая проблема. Другой параметр строки запроса вызван
this.url = `${this.Url}${id}`
Здесь происходит то, что this.url
видоизменяется при первом обращении в службу. Во втором вызове используется это мутированное значение this.url
, и к нему добавляется 1
, вызывая проблему.
Использовать область видимости с ключевым словом let
.
Пример воспроизведения вашей проблемы и решения:
let url ="..getdetails?id="
let id = 1;
url = `${url}${id}`;
console.log(url);
url = `${url}${id}`;
console.log(url);
function setUrl(id) {
console.log('Within a function...');
let url = "..getdetails?id="
url = `${url}${id}`;
console.log(url);
}
setUrl(1);
setUrl(1);
См. Вывод:
$ node app.js
..getdetails?id=1
..getdetails?id=11
Within a function...
..getdetails?id=1
Within a function...
..getdetails?id=1
Решение:
setUrl(url:string, id:number) {
url = `${url}${id}`;
console.log(url);
return url;
}
getProducts(url:string, id: number): Observable<Products> {
return this.http.get<Products>(this.setUrl(url, id));
}