В Angular 2 Я хотел бы использовать стратегию хэша только для IE9. Для этого я настраиваю маршрутизатор на использование хэш-стратегии только в том случае, если я обнаруживаю браузер IE9.Угловая 2 Ошибка AOT «Форма выражения не поддерживается»
Это работает при компиляции с TSC:
const useHash: boolean = (typeof window.history.pushState) !== 'function';
@NgModule({
declarations: [AppComponent],
imports: [
RouterModule.forRoot(appRoutes, {initialNavigation : false, useHash : useHash})
]
providers: [],
bootstrap: [AppComponent]
})
export class AppModule {}
Однако компилятор NGC (AOT компиляции) не принимает его. Следующая ошибка вызывается ngc (в строке объявления const).
Ошибка при распознавании значений символов статически. форма выражения не поддерживается
Я также пробовал (на основании этой статьи: https://medium.com/@isaacplmann/making-your-angular-2-library-statically-analyzable-for-aot-e1c6f3ebedd5#.h4pnszi13):
@NgModule({
declarations: [AppComponent],
imports: [
RouterModule.forRoot(appRoutes, {initialNavigation : false, useHash : AppModule.useHash})
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule {
static useHash: boolean = (typeof window.history.pushState) !== 'function';
}
Но я получаю ту же ошибку (на линии провайдера на этот раз). Обратите внимание, что он работает, если я делаю static useHash: boolean = false;
.
Как я могу решить проблему для объявления модуля?
Спасибо за предложение, но без него не работает. Я получаю «Аргумент типа» {initialNavigation: false; useHash:() => boolean; } 'не присваивается параметру типа ExtraOptions. Типы собственности «useHash» несовместимы. ». Если я попытаюсь использовать 'useHash: useHash()', я получаю исходную ошибку. – j3r6me