私は3つのアプリを持っています: root-config (single-spa), navbar-app (ポート 4201 angular 12) angular-app (ポート 4202 angular 12)
- 私の root-config アプリ (localhost:9000) には
root-config.ts
registerApplication({
name: "@org1/myNavbarApp",
app: () => System.import("@org1/myNavbarApp"),
activeWhen: ["/"],
});
registerApplication({
name: "@org1/myAngularApp",
app: () => System.import("@org1/myAngularApp"),
activeWhen: ['/angular']
});
- 私のmyNavbarAppには
app-routing.module.ts
const routes: Routes = [
{
path: 'login', component: LoginComponent,
}, {
path: 'menu',
component: MenuComponent,
},
{path: '**', component: EmptyRouteComponent}, // <-- will display angular app but will not
leave <mat-toolbar> in view from myNavBarApp ( only if i stay in localhost:4200/menu
and do refresh -> angular app default view displays under <mat-toolbar> of
myNavBarApp ( as expected behavior )
// {path: '**', redirectTo: 'login'}, // <-- renders default "login.component" on first load
of localhost:9000 (exactly what i need) but will cause next issue:
after navigateToUrl('angular') is done - ```login.component``` angular app content
are visible in the same page - ( not expected behavior )
];
const config: ExtraOptions = {
useHash: false,
enableTracing: false,
relativeLinkResolution: 'legacy',
};
@NgModule({
imports: [RouterModule.forRoot(routes, config)],
exports: [RouterModule],
providers: [{provide: APP_BASE_HREF, useValue: '/'}]
})
export class AppRoutingModule {
}
- NavBarApp に
menu.component.html
は次のものが含まれています。
<mat-toolbar color="warn" class="toolbar">
<mat-button-toggle-group class="menu">
<mat-button-toggle (click)="singleSpaNavigateUrl('angular')" value="angular">Angular App</mat-button-toggle>
</mat-button-toggle-group>
</mat-toolbar>
次のmenu.component.ts
ものが含まれます:
import {getAppNames, navigateToUrl, getMountedApps} from "single-spa";
public singleSpaNavigateUrl(url: string) {
console.log('appNames', getAppNames()); <-- IS ALWAYS EMPTY ARRAY , Why ?
console.log('mountedAppNames', getMountedApps()); <-- IS ALWAYS EMPTY ARRAY , Why ?
navigateToUrl('/'+ url); // <-- navigates to /angular
}
myNavBarApp を実現する方法
menu.component
は、ログイン後または必要なときにすべての子アプリで表示されたままになりますか?myNavBarApp がブラウザの root-config アプリからロードされたときにデフォルトとして達成する方法
login.component
(その後「/login」を手動で入力せずに)シングルスパのドキュメントには次のように書かれています:
single-spa Layout Engine is optional at this time but is recommended if you foresee utilizing server side rendering
..だから私はサーバーレンダリングを持っていません...だから私はレイアウトを実装していません。なぜ
getAppNames()
andgetMountedApps()
常に空の配列を返すのですか?