2016-11-14 37 views
1

在Angular 2中,我只想为IE9使用散列策略。为此我只有在检测到IE9浏览器时才将路由器配置为使用散列策略。Angular 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;

如何解决模块声明的问题?

回答

0

如果你只是导出useHash函数(从第一个代码片段)它应该工作。见代码片段波纹管:

export function useHash() { 
    return (typeof window.history.pushState) !== 'function'; 
} 

@NgModule({ 
    declarations: [AppComponent], 
    imports: [ 
    RouterModule.forRoot(appRoutes, {initialNavigation : false, useHash : useHash}) 
    ] 
    providers: [], 
    bootstrap: [AppComponent] 
}) 
export class AppModule {} 
+0

谢谢你的建议,但没有它不起作用。我得到'类型的参数{initialNavigation:false; useHash:()=> boolean; }'不能分配给'ExtraOptions'类型的参数。 属性'useHash'的类型不兼容。如果我尝试使用'useHash:useHash()',我得到原始错误。 – j3r6me

0

你的问题是确实怪,AOT编译器是获得应该很快得到解决,因为TS限制的全貌有点有限。

您可以跟踪此问题的更新 https://github.com/angular/angular/issues/13138

要解决您的问题,你只需要发挥的小动作对角的编译器...

const rConfig = { useHash: true, preloadingStrategy: PreloadAllModules }; 
rConfig.useHash = (typeof window.history.pushState) !== 'function'; 


@NgModule({ 
    declarations: [AppComponent], 
    imports: [ 
    RouterModule.forRoot(appRoutes, rConfig) 
    ] 
    providers: [], 
    bootstrap: [AppComponent] 
}) 
export class AppModule {} 
相关问题