Могу ли я создать директиву для переводов вместо конвейера? - PullRequest
0 голосов
/ 10 мая 2018

Я создаю модуль переводов, переводы хранятся локально с использованием PouchDB. И у нас есть 2 запасных варианта вместо одного, что делает самый популярный плагин перевода несовместимым.

Проблема в том, что установка канала на pure: false вызывает проблемы с производительностью, но я не могу найти какой-либо способ заставить трубу работать, когда это необходимо, вместо запуска onchange.

Так есть ли способ сделать это через директиву?

1 Ответ

0 голосов
/ 10 мая 2018

Вы должны использовать APP_INITIALIZER, предоставленный angular, Токен впрыска APP_INITIALIZER позволяет вам участвовать в процессе инициализации приложения Angular и выполнять свою собственную работу.

Создать AppConfigService, который загружает материалы перевода из БД.

@Injectable()
export class AppConfigService {

    constructor(private translateService: TranslateService) {
    }

    public load() {
        return new Promise((resolve, reject) => {
          // TranslateService.getLocaleProperties => You can make use to load transaltion stuffs. This returns Observable.
            this.translateService.getLocaleProperties().subscribe(
                (response) => {
                    resolve(true);
                },
                (error) => {
                    console.error("The localization resources are not loaded.");
                    resolve(true);
                });
        });
    }
}

В app.module.ts вы вносите эти изменения,

Создать configLoad фабрику, в которой есть функция, вызывающая метод загрузки AppConfigService.

export function configLoad(config: AppConfigService) { return () => config.load(); }

в providers: [] массиве предоставить APP_INITIALIZER

{ provide: APP_INITIALIZER, useFactory: configLoad, deps: [AppConfigService], multi: true },

...