#angular #typescript #rxjs #ngx-translate
Вопрос:
Я пытаюсь заполнить addLangs()
метод, который принимает массив строк из ngx-translate
пакета.
Но каждый раз, когда я пытаюсь поместить данные, поступающие из службы, они всегда остаются пустыми.
Я перепробовал все, но не смог понять, почему это происходит. Это небольшой код, но все же чего — то не хватает. Но когда я пытаюсь заполнить жестко закодированный строковый массив, который успешно заполняется внутри него.
this.userService.getLangauges().subscribe((s: Array<any> = []) => {
s.forEach((e) => {
this.languages.push(e.name);
});
});
console.log(this.languages); // I can see all the languages in console here
// let s = [
// "en",
// "sv-SE",
// "da-DA",
// "de-DE"
// ]
this.translate.addLangs(this.languages); // this is coming as empty
Ответ №1:
Я вижу, что вы используете this.languages
вне subscribe
функции, что приводит this.translate.addLangs(this.languages);
к тому, что она всегда выполняется перед тем, как вставлять языки, которые вы получаете, userService
в свой languages
массив.
Поэтому, чтобы решить эту проблему, вам нужно подождать, пока языки не переместятся в ваш languages
массив, или просто переместите эту часть, чтобы она была внутри subscribe
функции, как показано ниже:
this.userService.getLangauges().subscribe((s: Array<any> = []) => {
s.forEach((e) => {
this.languages.push(e.name);
});
// here you have to call addLangs function.
this.translate.addLangs(this.languages);
});