Что ж, хотя здесь есть сложности, вы можете попробовать это. Я думаю, это зависит от вашей кодовой базы. Маршрутизатор предоставляет свойство config
, содержащее его текущую конфигурацию, и метод resetConfig(routes: Routes)
для сброса конфигурации. Вы можете начать с этого и добавлять, скажем, компоненты на лету.
Однако компоненты должны быть доступны. Возможно, создается динамически, как упоминалось в другом ответе. В качестве альтернативы ваша конфигурация может включать что-то вроде этого:
constructor(private router: Router) {}
private addPlugin(routePath, pluginName, pluginPath) {
const currentConfig = this.router.config;
currentConfig.push({
path: routePath,
loadChildren: `precompiled-modules/${pluginPath}#${pluginName}`,
});
this.router.resetConfig(currentConfig);
}
Вам нужно будет каким-то образом получить pluginPath и pluginName - возможно, вычислить его по соглашению, может быть, вспомогательный сервер lil, который получит это, может быть, его массив предварительно настроен и уже загружен или что-то подобное. Я также предполагаю, что у вас будет действительно хорошая тестовая система, чтобы убедиться, что ваши плагины «совместимы». И, наконец, научите webpack / systemjs готовить модули. В общем, это возможно, но требует некоторой заделки.
Тем не менее, Angular 6 не за горами, а вместе с ним и Angular Elements. Элементы предоставят способ компилировать ваши модули как веб-компоненты и «экспортировать» их, чтобы их можно было использовать где угодно (не обязательно в приложениях Angular). Подумайте о плагинах jQuery - есть база jQuery.min.js
, которую вам нужно загрузить, но кроме этого вы больше не думаете об этом, вы просто используете свои новые элементы. То же самое и с Angular Elements - вы экспортируете то, что в основном является веб-компонентом. Есть «загрузчик» (эквивалент jquery.min.js) и ваш комплект Element. Но тогда ваш компонент - это просто еще один узел HTML со свойствами, атрибутами, привязками, событиями, вас больше не волнует, как и о входных данных.
Возможно, стоит подождать, взглянуть и решить для себя.
person
Zlatko
schedule
19.02.2018