2017-09-08 44 views
-1

我讀NGX,翻譯文件,我發現這個代碼片斷(被解釋正確的方法來使項目AOT兼容。打字稿和導出函數的語法

首先

export function createTranslateLoader(http: HttpClient) { 
    return new TranslateHttpLoader(http, './assets/i18n/', '.json'); 
} 

@NgModule({ 
    imports: [ 
     BrowserModule, 
     HttpClientModule, 
     TranslateModule.forRoot({ 
      loader: { 
       provide: TranslateLoader, 
       useFactory: (createTranslateLoader), 
       deps: [HttpClient] 
      } 
     }) 
    ],... 

// AoT requires an exported function for factories 
export function HttpLoaderFactory(http: HttpClient) { 
    return new TranslateHttpLoader(http); 
} 

@NgModule({ 
    imports: [ 
     BrowserModule, 
     HttpClientModule, 
     TranslateModule.forRoot({ 
      loader: { 
       provide: TranslateLoader, 
       useFactory: HttpLoaderFactory, 
       deps: [HttpClient] 
      } 
     }) 
    ],... 

我的問題是:什麼是differenc e將包含useFactory的函數名用圓括號括起來並傳遞給它?

感謝

+0

這些方法之間沒有區別。兩者都是AOT兼容的 – smnbbrv

+0

但是有什麼區別: useFactory:functionName 和 useFactory:(functionName) ??謝謝! – xger86x

+0

區別在於括號。還有什麼我應該說的?那裏。 IS。沒有。區別。 – smnbbrv

回答

1

我相信你稍微不當的帶領下在文檔中的例子怪癖。

非AOT版本可以是:

@NgModule({ 
    imports: [ 
     BrowserModule, 
     HttpClientModule, 
     TranslateModule.forRoot({ 
      loader: { 
       provide: TranslateLoader, 
       useFactory: (http: HttpClient) { 
        return new TranslateHttpLoader(http, './assets/i18n/', '.json'); 
       }, 
       deps: [HttpClient] 
      } 
     }) 
    ],... 

而且AOT版本必須有一個導出函數...

export function yourFunction(http: HttpClient) { 
    return new TranslateHttpLoader(http, './assets/i18n/', '.json'); 
} 

@NgModule({ 
    imports: [ 
     BrowserModule, 
     HttpClientModule, 
     TranslateModule.forRoot({ 
      loader: { 
       provide: TranslateLoader, 
       useFactory: yourFunction, 
       deps: [HttpClient] 
      } 
     }) 
    ],... 

換句話說:

如果要在使用AoT編譯或Ionic時配置自定義的TranslateLoader,則必須使用導出的函數而不是內聯函數。