#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, не нужно проверять какие-либо другие условия.