запретить запуск одной и той же службы несколько раз в angular 8

#javascript #angular #typescript #service #angular8

#javascript #angular #typescript #Обслуживание #angular8

Вопрос:

Итак, у меня есть три кнопки (A, B), которые вызывают одни и те же службы для получения одних и тех же данных. Итак, я просто хочу вызвать службу один раз, независимо от того, сколько раз я нажимаю на кнопку, я добавил логическое значение, чтобы определить, была ли служба уже вызвана, и если да, то только существующие данные, сохраненные из предыдущей службы. Ниже приведен мой код, однако я не могу получить обновленное логическое значение и данные при нажатии кнопки во второй или третий раз.

ts-файл

 exist: boolean = false;
buttonName : string;
postData: any = [];
data: any; = []
existData: any = [];
constructor(){}
ngOnInIt(){
   if(buttonName == "A"){
     if(this.exist == true){              // this.exist is always false no matter how many times button click
       this.existData();
     }else{
       this.getData();
     }
   }else if(buttonName == "B"){
     if(this.exist == true){
       this.existData();
     }else{
       this.getData();
     }
   }
}
getPostData(){
   this.postData.name = "Button";
   this.postData.parameters = [];
   this.exist = true;
}
getData(){
   this.getPostData();
   this.appService.getData(this.postData).pipe(first()).subscribe(data => {
      this.data = data;
      this.existData = data;
   })
}
existData(){
   console.log(this.existData)        // this is always []
}
  

Комментарии:

1. итак, у вас есть свойство, вызываемое existData , и у вас есть метод с тем же именем?

2. нет, я просто добавляю примерное имя,

Ответ №1:

прежде всего, ngOnInit вызывается только один раз, вам нужно вызвать getData() для события кнопки, а затем установить значение boolean в значение exist . Если вы просто хотите вызвать getData один раз, вы можете просто сделать это в самом ngOnInit, не нужно проверять какие-либо другие условия.