CookieXSRFStrategy не работает в режиме AOT @angular

Я предоставляю CookieXSRFStrategy для XSRFStrategy в app.module.ts

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

отлично работает с watch / serve при второй сборке, но при сборке с флагом --prod появляется эта ошибка:

ERROR in Ошибка при статическом разрешении значений символов. Вызовы функций не поддерживаются. Рассмотрите возможность замены функции или лямбды ссылкой на экспортированную функцию (позиция 50:34 в исходном файле .ts), разрешив символ AppModule в E: /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

person Ubaid Azad    schedule 28.03.2017    source источник


Ответы (1)


Отвечая на свой вопрос, я обнаружил, что мне нужно использовать ссылку на экспортированную функцию, например:

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

export function cookieStrategy() {
  return  new CookieXSRFStrategy('csrftoken', 'X-CSRFToken');
}

компилировался хорошо, но давал ошибку времени выполнения: as

ОШИБКА TypeError: this._xsrfStrategy.configureRequest не является функцией

изменение useValue в provide на useFactory устранило проблему.

providers: [
    { provide: APP_BASE_HREF, useValue: '/order/' },
    { provide: XSRFStrategy, useFactory: cookieStrategy },
    { provide: RequestOptions, useClass: DefaultRequestOptions }
  ],
person Ubaid Azad    schedule 28.03.2017
comment
Это золото. Вы также должны принять ответ. - person Cobus Kruger; 09.06.2017