Как загрузить конкретный модуль JSON-Files? Angular 4 — ngx-переводчик

Я новичок в Angular 4 и ngx-translate. Я ищу способ загрузить определенный JSON-файл для каждого модуля.

В моем app.module.ts этот код загружает файлы json для каждого языка:

TranslateModule.forChild({
  loader: {
    provide: TranslateLoader,
    useFactory: HttpLoaderFactory,
    deps: [Http]
  }
}),

export function HttpLoaderFactory(http: Http) {
  console.log('aiaiaiaiaiaia');
  return new TranslateHttpLoader(http, 'src/app/i18n/', '.json');
}

Однако в другом модуле этот код:

TranslateModule.forChild({
  loader: {
    provide: TranslateLoader,
    useFactory: HttpLoaderFactory,
    deps: [Http]
  }
}),

export function HttpLoaderFactory(http: Http) {
  console.log('jojojojojojojo');
  return new TranslateHttpLoader(http, 'src/app/cca-campaign-module/i18n/', '.json');
}

Этот код не выполняется...

По какой причине это не работает?


person Philipp Januskovecz    schedule 24.04.2017    source источник
comment
Я также испытываю такое же поведение. Я считаю, что в вашем app.module.ts рекомендуется использовать .forRoot(..), а не forChild(..). Даже с этим изменением специфичный для дочернего модуля перевод JSON не был получен при загрузке модуля. Если вы укажете изолированный: true как часть дочернего модуля, а не модуля приложения, JSON перевода извлекается, но не объединяется с переводами модуля приложения, поскольку они изолированы от модуля. Для этого потребуется включить общие переводы в оба модуля перевода JSON. Не уверен, что это задумано. Я поделюсь еще одной находкой, когда столкнусь   -  person Dyno    schedule 08.05.2017
comment
этот вопрос уже задан здесь и на github, но без ответа. На самом деле я сталкиваюсь с той же проблемой, и, насколько я понимаю, forChild предназначен только для лениво загруженных модулей, а не для модулей, уже включенных в основной app.module.ts.   -  person Guillaume    schedule 20.09.2017


Ответы (1)


Сохраните файл в каталоге Assets (параллельно каталогу приложения).

Обратите внимание, что если бы вы сгенерировали с помощью ng новое имя вашего приложения, этот каталог ресурсов существует в той же строке, что и каталог «приложение», а службы должны быть дочерним каталогом каталога приложения. Может выглядеть, как показано ниже:

:: приложение/услуги/myservice.ts

getOrderSummary(): Наблюдаемый {

    // get users from api
    return this.http.get('assets/ordersummary.json')//, options)
        .map((response: Response) => {
            console.log("mock data" + response.json());
            return response.json();
        }
        )
        .catch(this.handleError);
} 
person HydTechie    schedule 03.05.2017
comment
Я думаю, вы должны предоставить более полный ответ и код, так как это совсем не помогает в решении проблемы. - person Guillaume; 20.09.2017