ngx-translate: невозможно прочитать свойство currentLang из undefined

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

Чтобы было проще:

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

Теперь после слияния я получаю следующую ошибку в модуле ngx-translate при загрузке приложения: < img src = "https://i.stack.imgur.com/kF9Uo.png" alt = "ошибка ngx-translate">

(Еще одна копия трассировки стека) 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:  Точка останова 1

Вот такая же точка останова, но с функциональной версией проекта (так до слияния) и без параметра undefined: Точка останова 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'));
    });
  }
} 

person Noxionx    schedule 27.08.2018    source источник
comment
вы можете проверить разницу с предыдущей фиксацией перед слиянием, при котором возникла проблема, если раньше она работала нормально в ветке разработки. Скорее всего, существует несоответствие версий между вашими ветками   -  person Niladri    schedule 27.08.2018
comment
Не могли бы вы показать нам код от AppComponent?   -  person user184994    schedule 27.08.2018
comment
@Niladri Я сейчас проверю версии модулей, буду держать вас на связи. @ user184994 Я отредактировал свой пост, добавив код AppComponent, но я не думаю, что это поможет больше, поскольку этот код не менялся долгое время.   -  person Noxionx    schedule 28.08.2018
comment
@Niladri Я сделал несколько проверок, но это не похоже на несоответствие версии (или, возможно, странное поведение с yarn.lock). Я выполнил следующий тест, который для меня актуален: я git checkout на старой функциональной версии (и тестирую ее, чтобы она работала!), Затем я git checkout на последней версии (так что node_module вообще не меняется) и затем приложение ломается.   -  person Noxionx    schedule 28.08.2018


Ответы (1)


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

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

Итак, вот часть:

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

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

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

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

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

person Noxionx    schedule 28.08.2018