ngx-translate не работает в модальном режиме ng-bootstrap

Канал translate ngx-translate не работает внутри модального ng-bootstrap.

<div class="modal-header">
  <h3 class="modal-title">
    {{ 'MODAL.TITLE' | translate }}
  </h3>
</div>

<div class="modal-body">
</div>

<div class="modal-footer">
  <button class="btn btn-primary" type="button" (click)="activeModal.close('Close click')">
    <span class="fa fa-remove"></span> {{ 'BUTTON.CLOSE' | translate }}
  </button>
</div>

Образец экрана


person Roger Ng    schedule 30.08.2017    source источник
comment
Даже их демо перестало работать. embed.plnkr.co/01UjWY3TKfP6pgwXKuEa   -  person mxr7350    schedule 30.08.2017
comment
Возможно, API, который использует фильтр, устарел.   -  person Joshua Barnett    schedule 30.08.2017


Ответы (1)


В ngx-translate Readme написано:

Примечание: если вы все еще используете Angular ‹4.3, используйте Http из @angular/http с [email protected].

Итак, каковы различия?

В Angular >= 4.3.x вместо предоставления Http для TranslateModule теперь вам нужно предоставить HttpClient:

app.module.ts :

import {HttpClient, HttpClientModule} from "@angular/common/http"; //<-- before import {HttpModule, Http} from "@angular/http";
...
export function HttpLoaderFactory(httpClient: HttpClient) { //<-- before Http
    return new TranslateHttpLoader(httpClient, "i18n/", ".json");
}

@NgModule({
    imports: [
        ...
        HttpClientModule, //<-- before HttpModule
        TranslateModule.forRoot({
          loader: {
            provide: TranslateLoader,
            useFactory: HttpLoaderFactory,
            deps: [HttpClient] //<-- before Http
          }
        })
    ],
    ...
})

Я развил и исправил Angular Demo (4.3.6): https://plnkr.co/edit/1VZdWdQvat3lxaXYVZs3?p=preview

person Maxime Lafarie    schedule 30.08.2017
comment
ngx-translate отлично работает вне модального окна ng-bootstrap. Цените, если вы можете создать Plunker, объединяющий эти два. ng-bootstrap.github.io/#/components/modal/examples - person Roger Ng; 30.08.2017
comment
@RogerNg вот оно, я только что переместил код в модальное окно, и все, кажется, работает: plnkr .co/edit/z5bB63YihlRPYmJ3Giqh?p=preview ваш модальный во вложенных модулях? - person Maxime Lafarie; 30.08.2017
comment
Я использую компоненты второго примера в качестве контента для модального окна ng-bootstrap. - person Roger Ng; 30.08.2017
comment
У меня есть основной модуль и модуль приложения. Между основным модулем и модулем приложения нет никакой связи. Компонент находится под основным модулем. TranslateModule.forRoot() импортируется в модуль приложения. - person Roger Ng; 30.08.2017
comment
@RogerNg Я сделал отдельный компонент modal.component.ts. В app.component.ts он вызывает <modal-component> и передает его содержимое в модальное окно. Это то, что вы ищете? Работающий плункер здесь: plnkr.co/edit/SCgp90BmSzXbRAML37fj?p=preview - person Maxime Lafarie; 30.08.2017