在Angular中,当传递整数URL参数时,可能会调用两次服务,这是因为Angular的变更检测机制会导致组件在初始化时触发两次。
为了解决这个问题,可以使用rxjs的distinctUntilChanged
操作符来确保只有参数值发生变化时才调用API。
下面是一个示例代码:
myService.ts
的服务文件,其中包含一个方法来调用API:import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
import { distinctUntilChanged } from 'rxjs/operators';
@Injectable()
export class MyService {
constructor(private http: HttpClient) {}
getData(param: number): Observable {
return this.http.get(`api-url?param=${param}`).pipe(distinctUntilChanged());
}
}
import { Component, OnInit } from '@angular/core';
import { MyService } from 'path-to-myService';
@Component({
selector: 'app-my-component',
template: '',
})
export class MyComponent implements OnInit {
constructor(private myService: MyService) {}
ngOnInit(): void {
const param = 123; // 你的参数值
this.myService.getData(param).subscribe((data) => {
// 处理返回的数据
});
}
}
在这个示例中,distinctUntilChanged
操作符会确保只有param
的值发生变化时才会调用API。这样就可以避免不必要的重复调用。