ngx-translate: невозможно прочитать свойство 'currentLang' из неопределенного - PullRequest
0 голосов
/ 27 августа 2018

Я работаю над проектом Angular 6 и столкнулся с довольно досадной проблемой, так как я объединил ветку функций.

Для простоты:

  • Мы используем модуль ngx-translate с самого начала проекта, и до сих пор он работал нормально
  • Мы создаем функции (например, ту, которую я слил) в ветвях git, и мы объединяем их в ветке разработки, когда мы закончим
  • До слияния и разработки работали до объединения

Теперь, после слияния, я получаю следующую ошибку в модуле ngx-translate при загрузке приложения: ngx-translate error

(еще одна копия трассировки стека) TypeError: Cannot read property 'currentLang' of undefined at TranslationService.get currentLang [as currentLang] (ngx-translate-core.js:398) at TranslationService.use (ngx-translate-core.js:489) at new AppComponent (app.component.ts:29) at createClass (core.js:11733) at createDirectiveInstance (core.js:11554) at createViewNodes (core.js:13095) at createRootView (core.js:12967) at callWithDebugContext (core.js:14455) at Object.debugCreateRootView [as createRootView] (core.js:13702) at ComponentFactory_.create (core.js:10705)

После дня поиска я все еще не могу понять, почему появилась эта ошибка. Странно то, что ни один из кодов, выдающих ошибку, не был отредактирован (ни в разработке, ни в ветке возможностей).

Я могу сказать, что эта ошибка возникает после вызова translateService.use('en') (мы видим это на трассировке стека), и причина в том, что TranslateService не был правильно создан при загрузке приложения.

Вот точка останова, когда вызывается конструктор TranslateService, и мы видим, что большинство параметров undefined: Breakpoint 1

Здесь та же точка останова, но с функциональной версией проекта (до слияния, поэтому), а параметр undefined отсутствует: Breakpoint 3

Так что, если у кого-нибудь есть представление о том, что происходит, это будет ОГРОМНАЯ помощь, потому что у меня нет свежих идей!

Редактировать - вот мой код моего AppComponent

import { Component } from '@angular/core';

import { TranslateService } from '@ngx-translate/core';
import { LangService } from './core/services/lang.service';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss'],
})
export class AppComponent {
  constructor(
    private translate: TranslateService,
    private languageService: LanguageService,
  ) {
    this.translate.use('fr');
    const subLang = this.languageService.getLangs().subscribe((rep) => {
      this.translate.addLangues(rep);
      this.translate.setDefaultLang(rep.find((l) => l.defaut).code);
      this.translate.use(localStorage.getItem('lang'));
    });
  }
} 

1 Ответ

0 голосов
/ 28 августа 2018

Хорошо, так что я наконец понял, что происходит.

Это была просто tsconfig.json, которая была отредактирована в моей ветви функций.

Так вот эта часть:

{
  "compileOnSave": false,
  "compilerOptions": {
    "baseUrl": "./",
    ...
    "target": "es6" <------- This is the part that is failing
  }
}

Когда я использовал Angular CLI для создания приложения, эта строка была установлена ​​на "target": "es5", но я по какой-то причине изменил ее на es6 в своей ветви функций, и перед объединением все работало просто отлично.

Именно после слияния появилась ошибка ... и я до сих пор не знаю, почему!

Так что я просто переключился обратно на "target": "es5" и теперь он работает.

В любом случае, спасибо.

...