CookieXSRFStrategy无法在AOT模式下工作@angular

Uba*_*zad 5 angular2-services angular2-http angular

我提供CookieXSRFStrategyXSRFStrategyapp.module.ts

providers: [
    { provide: APP_BASE_HREF, useValue: '/order/' },
    { provide: XSRFStrategy, useValue: new CookieXSRFStrategy('csrftoken', 'X-CSRFToken') },
    { provide: RequestOptions, useClass: DefaultRequestOptions }
  ],
Run Code Online (Sandbox Code Playgroud)

在第二次构建时使用watch/serve工作正常,但在使用--prod标志构建时,收到此错误:

ERROR in Error遇到静态解析符号值.不支持函数调用.考虑使用对导出函数的引用替换函数或lambda(原始.ts文件中的位置50:34),解析E中的符号AppModule:/repo/src/app/app.module.ts

ng --version

@angular/cli: 1.0.0
node: 6.9.1
os: win32 x64
@angular/common: 4.0.0
@angular/compiler: 4.0.0
@angular/core: 4.0.0
@angular/forms: 4.0.0
@angular/http: 4.0.0
@angular/platform-browser: 4.0.0
@angular/platform-browser-dynamic: 4.0.0
@angular/router: 4.0.0
@angular/animations: 4.0.0
@angular/cli: 1.0.0
@angular/compiler-cli: 4.0.0
Run Code Online (Sandbox Code Playgroud)

Uba*_*zad 9

回答我自己的问题,发现我必须使用对导出函数的引用,所以使用如下:

providers: [
    { provide: APP_BASE_HREF, useValue: '/order/' },
    { provide: XSRFStrategy, useValue: cookieStrategy },
    { provide: RequestOptions, useClass: DefaultRequestOptions }
],

export function cookieStrategy() {
  return  new CookieXSRFStrategy('csrftoken', 'X-CSRFToken');
}
Run Code Online (Sandbox Code Playgroud)

编译好,但是给出了运行时错误:as

错误TypeError:this._xsrfStrategy.configureRequest不是函数

改变useValue提供useFactory修复问题

providers: [
    { provide: APP_BASE_HREF, useValue: '/order/' },
    { provide: XSRFStrategy, useFactory: cookieStrategy },
    { provide: RequestOptions, useClass: DefaultRequestOptions }
  ],
Run Code Online (Sandbox Code Playgroud)