तो मेरे पास मेरी सेवा में एक फ़ंक्शन है जो एक मूल्य लौटा रहा है और मैं चाहता हूं कि मेरा घटक मूल्य को सुन रहा हो और जब यह बदलता है तो इसे अपडेट करें, इसलिए मैंने सोचा कि इसकी सदस्यता लेना एक अच्छा विचार होगा लेकिन यह इरादा के अनुसार काम नहीं करता है और जब यह बदलता है तो मान अपडेट नहीं करता है। क्या ऐसा करने का कोई अलग तरीका है?

 ngOnInit(): void {
    this.translateService.onLangChange.subscribe(() => this.getLocaleDateFormat());
  }

 getLocaleDateFormat(): Observable<string> {
   this.dateAdapter.setLocale(Languages[this.translateService.currentLang]);
   this.currLang = Languages[this.translateService.currentLang];
    console.log( 'get' + this.currLang);
    return of (this.currLang);

  }

ngOnInit(): void {
    this.localeDateAdapterService.getLocaleDateFormat().subscribe(currLang => this.currLang = currLang);
}

मुझे यह जानने की आवश्यकता नहीं है कि यह कब बदलता है, जब यह बदलता है तो मैं केवल अद्यतन करने का मूल्य रखता हूं। टाइमर का उपयोग किए बिना और ट्रिगर के रूप में OnLangChange का उपयोग किए बिना भी:

ngOnInit(): void {
 this.translateService.onLangChange.subscribe(() => this.localeDateAdapterService.getLocaleDateFormat().subscribe(currLang => this.currLang = currLang));
}
1
C0mpl3x 18 जिंदा 2021, 20:49

2 जवाब

सबसे बढ़िया उत्तर

मैंने इसे लोकेल सेवा नामक एक अलग सेवा के रूप में बनाया है। आपको किसी तरह वर्तमान भाषा को अनुवाद सेवा से प्राप्त करना होगा या यदि आप इसे एक अलग सेवा के रूप में बनाते हैं जो इसे संभालती है।

private onLanguageChange(lang: string): void {
        // To add another lang:
        // 1. add mapping from EMS language codes to Angular locale codes in the map at the bottom of this file
        // 2. register locale data, also at the bottom of this file
        const locale = Languages[lang];
        this.activeLocale.next(locale);
        this.dateAdapter.setLocale(locale);
        this.LW.log('Language change detected (current lang: ' + lang + '), setting locale to: ' + locale);
      }
    
      public getActiveLocale(): BehaviorSubject<string> {
        return this.activeLocale;
      }
    export const Languages = {
      'eng': 'en',
      'slk': 'sk',
      'cze': 'cs',
    };
    
    registerLocaleData(localeSk);
    registerLocaleData(localeCs);

यह घटक को जाता है

this.localeService.getActiveLocale().subscribe(locale => this.currentLocale = locale));
1
G0han 22 जिंदा 2021, 00:31

/rxjs . के विषय का प्रयोग करें

// Service

language$ = new Subject<string>();

setLanguage(lang: string): void {
 this.language$.next(lang);
}


// Component

this.language$.subscribe((res: string) => {
 console.log(res);
});

this.languageSrv.setLanguage('en');
this.languageSrv.setLanguage('es');
this.languageSrv.setLanguage('it');
this.languageSrv.setLanguage('fr');

// 'en'
// 'es'
// 'it'
// 'fr'

सदस्यता समाप्त करने के लिए हमेशा याद रखें

1
Sergi Martinez 18 जिंदा 2021, 21:39