在Angular 4中,当组件被路由导航到时,ngOnInit()方法会被调用。如果在每次加载组件时都发起API调用,可能会导致重复的API请求。为了解决这个问题,可以使用Angular的生命周期钩子和服务来进行处理。
首先,创建一个服务来处理API调用。在服务中,使用一个属性来存储已经获取的数据,以便在后续的调用中重复使用。这样就可以避免重复的API请求。
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
@Injectable()
export class DataService {
private cachedData: any;
constructor(private http: HttpClient) {}
getData() {
if (this.cachedData) {
// 如果已经有缓存的数据,直接返回
return Promise.resolve(this.cachedData);
} else {
// 否则发起API请求,获取数据并缓存
return this.http.get('your-api-url').toPromise()
.then(data => {
this.cachedData = data;
return data;
});
}
}
}
然后,在组件中使用该服务来获取数据。在ngOnInit()方法中调用服务的getData()方法,这样就可以确保只有在第一次加载组件时才会发起API请求。
import { Component, OnInit } from '@angular/core';
import { DataService } from 'your-data-service';
@Component({
selector: 'app-my-component',
templateUrl: './my-component.component.html',
styleUrls: ['./my-component.component.css']
})
export class MyComponentComponent implements OnInit {
data: any;
constructor(private dataService: DataService) { }
ngOnInit() {
this.dataService.getData()
.then(data => this.data = data);
}
}
通过这种方式,只有在第一次加载组件时才会发起API请求,并且之后的每次加载都会直接使用缓存的数据,避免了重复的API调用。
上一篇:Angular 4 路由参数验证