2017-02-05 4 views
3

Как новичок в угловом режиме, я сталкиваюсь с проблемой, пытаясь создать свое приложение через angular-cli.angular2 build issue useFactory с функцией

После выполнения этого tutorial:

Мой appModule выглядит следующим образом:

... 
providers: [ 
{ provide: HttpService, useFactory: (backend: XHRBackend, options:  RequestOptions) => { 
return new HttpService(backend, options); }, 
    deps: [XHRBackend, RequestOptions]} 
] 
... 

При создании его я получаю:

Error: Error encountered resolving symbol values statically. Function calls are 
not supported. Consider replacing the function or lambda with a reference to an 
exported function (position 63:39 in the original .ts file), resolving symbol Ap 
pModule in ../angular/app/src/app/app.module.ts 
at positionalError (..\angular\app\node_modules\@angular\compiler-c 
li\src\static_reflector.js:595:18) 

Когда я использую ng serve приложение работает без каких-либо проблем.

ответ

4

Попробуйте это:

export function httpServiceFactory(backend: XHRBackend, options: RequestOptions) { 
 
    return new HttpService(backend, options); 
 
} 
 
    
 
providers: [ 
 
    { 
 
    provide: HttpService, 
 
    useFactory: httpServiceFactory, 
 
    deps: [XHRBackend, RequestOptions] 
 
    } 
 
]

Когда вы строите, он пытается выполнить компиляцию AoT, которая не срабатывает при встрече с лямбда-функцией, поэтому вам нужно экспортировать ее. Хотя при использовании ng-serve используется JiT-компиляция.

https://github.com/angular/angular/issues/11262#issuecomment-244266848

1

Я видел это раньше и не совсем уверен, что вызывает эту ошибку (то есть, почему это работает в некоторых случаях, а другие - нет), но вы можете решить ее, выполнив то, что говорит ошибка: «Рассмотрите заменяя функцию или лямбда ссылкой на экспортированную функцию «.

export function httpFactory(backend: XHRBackend, options: RequestOptions) { 
    return new HttpService(backend, options); 
} 

... 

providers: [ 
    { 
    provide: HttpService, 
    useFactory: httpFactory, 
    deps: [XHRBackend, RequestOptions] 
    } 
] 
1

Вместо встроенной функции, использовать явную функцию:

function httpFactory(backend: XHRBackend, options: RequestOptions) { 
    return new HttpService(backend, options); 
} 
... 
providers: [{ provide: HttpService, useFactory: httpFactory, 
       deps: [XHRBackend, RequestOptions]} 
] 
... 

 Смежные вопросы

  • Нет связанных вопросов^_^