single spa не будет отображать два приложения одновременно
Я установил среду с использованием одного спа, и я испытываю странное поведение. У меня настроено три приложения angular: приложение для панели навигации с двумя собственными страницами, app1 и app2, с несколькими страницами, которые будут отображаться под панелью навигации. Я использовал этот репозиторий в качестве модели: https://github.com/joeldenning/coexisting-angular-microfrontends. Насколько я понимаю, репозиторий был изменен три дня назад, я использую предыдущие коммиты в качестве модели.
поведение: localhost:port/ - показывает панель навигации - правильно
localhost:port/navbarPage - показывает панель навигации и страницу панели навигации - правильно
localhost:port/app1Page - отображает только панель навигации в течение нескольких секунд, а затем переключается на отображение только app1Page или наоборот - неправильно
Что действительно странно, так это то, что отображаются оба отдельных div-шаблона шаблона спа, и app1Page находится внутри div навигационной панели, а div app1 содержит пустой корневой элемент приложения. (увидеть ниже)
Я заметил, что вы обновили index html, чтобы использовать одиночный спа-макет, но я все еще использую старую версию FYI. Вот мой index.html:
<!DOCTYPE html>
<html>
<head>
<meta
http-equiv="Content-Security-Policy"
content="default-src * data: blob: 'unsafe-inline' 'unsafe-eval'; script-src * 'unsafe-inline' 'unsafe-eval'; connect-src * 'unsafe-inline'; img-src * data: blob: 'unsafe-inline'; frame-src *; style-src * data: blob: 'unsafe-inline'; font-src * data: blob: 'unsafe-inline';"
/>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>Your application</title>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="importmap-type" content="systemjs-importmap" />
<!-- "Landing-App": "http://localhost:4203/landing", -->
<script type="systemjs-importmap">
{
"imports": {
"App1-App": "http://localhost:4201/main.js",
"App2-App": "http://localhost:4202/main.js",
"Navbar-App": "http://localhost:4300/main.js",
"single-spa": "https://cdnjs.cloudflare.com/ajax/libs/single-spa/5.5.0/system/single-spa.min.js"
}
}
</script>
<link
rel="preload"
href="https://cdnjs.cloudflare.com/ajax/libs/single-spa/5.5.0/system/single-spa.min.js"
as="script"
crossorigin="anonymous"
/>
<script src="https://unpkg.com/core-js-bundle@3.1.4/minified.js"></script>
<script src="https://unpkg.com/zone.js"></script>
<script src="https://unpkg.com/import-map-overrides@1.15.1/dist/import-map-overrides.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/4.0.0/system.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/4.0.0/extras/amd.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/4.0.0/extras/named-exports.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/4.0.0/extras/named-register.min.js</script>
</head>
<body>
<script>
System.import("single-spa").then(function (singleSpa) {
singleSpa.registerApplication(
"Navbar-App",
function () {
return System.import("Navbar-App");
},
function (location) {
return true;
}
);
singleSpa.registerApplication(
"App1-App",
function () {
return System.import("App1-App");
},
function (location) {
return location.pathname.startsWith("/app1");
}
);
singleSpa.registerApplication(
"App2-App",
function () {
return System.import("App2-App");
},
function (location) {
return location.pathname.startsWith("/app2");
}
);
singleSpa.start();
});
</script>
<import-map-overrides-full></import-map-overrides-full>
</body>
</html>
Любая помощь будет оценена по достоинству! Благодарность!
1 ответ
Моя проблема заключалась в том, что корневые селекторы моих приложений были одинаковыми для всех трех приложений. Я изменил их на уникальные селекторы, и это сработало!