Есть ли способ лениво загрузить статический JSON во время маршрутизации Angular6? - PullRequest
0 голосов
/ 09 октября 2018

У меня есть приложение Angular6, которое разрабатывается в качестве основы для внутренних приложений.Навигация заголовка / нижнего колонтитула / основной будет общей, но каждое приложение (функциональный модуль) должно иметь внутренние потоки, отделенные друг от друга.Например, одна функция может быть покупкой, другая может быть подключена, другая может быть информационной панелью продаж.Они очень отличаются друг от друга.

Я пытаюсь придумать декларативный способ определения известных конфигураций для каждой функции.Например, второстепенная навигация (страница на страницу в элементе), заголовок верхнего уровня и различные другие точки данных, связанные с контекстом.Сначала я думал, чтобы они были определены как JSON в каждой функции, что прекрасно работает, за исключением того, что теперь мне нужно импортировать конфигурацию каждой функции независимо от того, перемещается ли пользователь по этой функции или даже имеет к ней доступ.

I 'У нас уже настроена служба контекста, которая проверяет URL-адрес при навигации и настраивает некоторые элементы, но, опять же, она должна импортировать все возможные конфигурации, используя это в верхней части этой службы.

import { fooConfig } from '@foo\foo.config';
import { barConfig } from '@bar\bar.config';
import { bazConfig } from '@baz\baz.config';

Так чтоВопрос заключается в следующем: есть ли способ проверить URL-адрес при навигации, и в рамках этой подписки выбрать конфигурацию из правильного файла без предварительного импорта?Или, может быть, я могу использовать модуль для выражения / объявления этих опций?

Ответы [ 2 ]

0 голосов
/ 09 октября 2018
updateConfig(feature: string) {
   import(`../configs/${feature}.config.json`).then(cfg => {
      this._currentConfig$.next(cfg);
   });
}

Приведенный выше фрагмент показывает, что я придумал.Оказывается, WebPack не может переварить пути @, которые вы обычно используете при импорте, и вы также не можете использовать полностью переменные пути.Все возможные опции для пакета модуля должны иметь некоторую общую часть пути.В итоге я перенес свои конфиги с @foo\foo.config.ts на @core\configs\foo.config.json.Что делает их менее модульными, потому что теперь ядро ​​хранит их конфигурацию, но делает модуль ленивым.

0 голосов
/ 09 октября 2018

Использование Typescript Динамических выражений импорта может быть жизнеспособным вариантом в вашем случае ..

let config;
switch (val) {
  case 'foo': config = await import('@foo\foo.config'); break;
  case 'bar': config = await import('@bar\bar.config'); break;
  case 'baz': config = await import('@baz\baz.config'); break;
}

Хотя, насколько я знаю, на момент написания статьи есть способиспользуйте переменные для строки импорта (например, await import(path)).

...