每次使用路由导航到组件时,我都使用6.1.3角度HTTP提取。我是新手。
任何人都可以帮忙。
我正在ValidCurrencies
中获取数据,我认为这是问题所在
ngOnninit
当我导航到我的链接时(我想知道它的home组件),我希望获取值。我使用路由将其工作,而当获取值也获取了它,但是当我在ngOninit中使用this.http.get()我首先导航到homecomponent,它会获取好的值,但是当我导航到登录并返回homecomponent时,它将再次获取值。我不想要。还有其他方法吗?
答案 0 :(得分:1)
如果您不想继续获取数据,则可以将请求移至服务中,并使用ReplaySubject
为该服务实现缓存。
答案 1 :(得分:0)
创建一个服务,并以其中的身份持有userdata
:
家庭服务
@Injectable()
export class HomeService {
private userdata;
constructor(private http: HttpClient) { }
getData() {
if(!userdata) { // it will only hit api if data is not there
this.http.get('https://my-json-server.typicode.com/alifrontend499/userdatafake/profile').subscribe(responsive => {
this.userdata = [];
$(responsive).each((count, obj) => {
this.userdata.push(obj);
});
}, err => {
console.log(err);
});
}
}
get UserData() {
return this.userdata;
}
}
HomeComponent
export class HomeComponent implements OnInit {
constructor(
private service: HomeService;
) { }
ngOnInit() {
this.service.getData();
}
get userdata() {
return this.service.UserData;
}
}
将jQuery
与Angular
一起使用也不是一个好习惯。
答案 2 :(得分:0)
每次路由更改时,Angular Router都会破坏该组件,并且在路由到“ Home”时,每次也会调用onInit。 这是路由器/角度生命周期。 您可以定义重用策略,如果满足条件,路由器将不会销毁组件,也不会在路由返回时重用组件。 (不会调用构造函数和onInit)
此问题的解决方案是使用全局存储(Ngrx)或AppModule级别上提供的全局服务。
使用Singleton模式获取数据,如果为null / undefined,则在未返回Object的情况下进行http调用。