每次我使用路由导航到组件时都会获取角度http

时间:2018-08-23 04:22:34

标签: javascript angular

每次使用路由导航到组件时,我都使用6.1.3角度HTTP提取。我是新手。

任何人都可以帮忙。

我正在ValidCurrencies中获取数据,我认为这是问题所在

enter image description here

ngOnninit

当我导航到我的链接时(我想知道它的home组件),我希望获取值。我使用路由将其工作,而当获取值也获取了它,但是当我在ngOninit中使用this.http.get()我首先导航到homecomponent,它会获取好的值,但是当我导航到登录并返回homecomponent时,它将再次获取值。我不想要。还有其他方法吗?

3 个答案:

答案 0 :(得分:1)

如果您不想继续获取数据,则可以将请求移至服务中,并使用ReplaySubject为该服务实现缓存。

Angular 2 cache observable http result data

答案 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;
  }
}

jQueryAngular一起使用也不是一个好习惯。

答案 2 :(得分:0)

每次路由更改时,Angular Router都会破坏该组件,并且在路由到“ Home”时,每次也会调用onInit。 这是路由器/角度生命周期。 您可以定义重用策略,如果满足条件,路由器将不会销毁组件,也不会在路由返回时重用组件。 (不会调用构造函数和onInit)

此问题的解决方案是使用全局存储(Ngrx)或AppModule级别上提供的全局服务。

使用Singleton模式获取数据,如果为null / undefined,则在未返回Object的情况下进行http调用。

RouteReuseStrategy