angular - subscribe fonksiyonunda global değişkeni ayarlayamıyor
Servis yanıtını bir değişkende saklamak ve view'de kullanmak istiyorum. TypeScript dosyam aşağıdaki gibi.
MenuService özel bir servistir ve geMenus() veritabanından tüm menüleri getirmek için kullanılan bir fonksiyondur
import { Component, OnInit } from '@angular/core';
import { TranslateService } from '@ngx-translate/core';
import { MenusService } from '../menus.service';
@Component({
selector: 'app-header1',
templateUrl: './header1.component.html',
styleUrls: ['./header1.component.css'],
providers:[MenusService]
})
export class Header1Component implements OnInit {
menus=['Login','Register','Subscribe'];
primeryMenus:any;
//menus1=['Home','Matches','Players','Teams','Tournaments','Contact Us','About Us'];
constructor(private translate: TranslateService,private _ser:MenusService) {
translate.setDefaultLang('en');
}
ngOnInit(){
this.getMenu();
}
getMenu(){
this._ser.getMenus().subscribe(res=>{
this.primeryMenus = res;
console.log(this.primeryMenus) // output is json object ( getting correct output )
});
console.log(this.primeryMenus) // output is undefined
}
switchLanguage(language: string) {
this.translate.use(language);
}
}
subscribe observable içinde primaryMenu nasıl ayarlanır
Cevap #1
Kodunuz
this._ser.getMenus().subscribe(res=>{
this.primeryMenus = res;
console.log(this.primeryMenus) // output is json object ( getting correct output )
});
console.log(this.primeryMenus) // output is undefined
Bu, subscribe'ın temel doğasıdır. Geri çağırma, tüm senkron kod tamamlandıktan sonra çalıştırılır.
Düzelt
Değeri yalnızca subscribe çağrıldıktan sonra kullanın.
Cevap #2
Observables asenkron çalışır. İkinci console.log() ifadesini aboneliğin dışında koyuyorsunuz. Orada, Observable bir değer döndürmeden çok önce işlenir. Bunu sadece şu şekilde yapın:
getMenu(){
this._ser.getMenus().subscribe(res=>{
this.primeryMenus = res;
console.log(this.primeryMenus) // output is json object ( getting correct output )
});
// never put a console(log) here if you want to see the return value of the observable above as it processed long before the Observable returns a value.
