我正在从事Angular 6项目,由于合并了功能分支,因此我面临一个非常烦人的问题。
简单起见:
ngx-translate
模块,到目前为止,它一直运行良好现在,合并后,当应用程序启动时,我在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)
经过一天的搜索,我仍然不知道为什么会出现此错误。奇怪的是,产生错误的代码都没有被编辑过(在develop或feature分支上都没有)。
我可以说这个错误是在调用translateService.use('en')
之后发生的(我们可以在堆栈跟踪中看到它),原因是TranslateService
在应用程序引导程序上没有正确实例化。
在调用TranslateService
的构造函数时,这是一个断点,我们可以看到大多数参数是undefined
:
这里是相同的断点,但是具有项目的功能版本(因此在合并之前),并且没有undefined
参数:
因此,如果有人对正在发生的事情有任何想法,那将是巨大的帮助,因为我没有新的想法了!
编辑-这是我的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'));
});
}
}
答案 0 :(得分:0)
好的,所以我终于弄清楚了正在发生什么。
在我的功能分支中只是编辑了tsconfig.json
。
所以这是一部分:
{
"compileOnSave": false,
"compilerOptions": {
"baseUrl": "./",
...
"target": "es6" <------- This is the part that is failing
}
}
当我使用Angular CLI创建应用程序时,此行设置为"target": "es5"
,但出于某种原因我在功能分支中将其更改为es6
,并且在合并之前一切正常。
是在合并之后,该错误出现了……我仍然不知道为什么!
所以我刚切换回"target": "es5"
,现在它可以正常工作了。
还是谢谢。