mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2026-03-13 10:22:08 +08:00
feat(angular): add standalone router outlet (#27926)
This commit is contained in:
@@ -30,3 +30,5 @@ export {
|
||||
} from './directives/navigation/router-link-delegate';
|
||||
export { NavDelegate } from './directives/navigation/nav-delegate';
|
||||
export { IonTabs } from './directives/navigation/tabs';
|
||||
|
||||
export { ProxyCmp } from './utils/proxy';
|
||||
|
||||
@@ -1,3 +1 @@
|
||||
// This is required to get ng-packagr to build.
|
||||
// Remove this when you actually have something to export
|
||||
export const placeholder = true;
|
||||
export { IonRouterOutlet } from './navigation/router-outlet';
|
||||
|
||||
13
packages/angular/standalone/src/navigation/router-outlet.ts
Normal file
13
packages/angular/standalone/src/navigation/router-outlet.ts
Normal file
@@ -0,0 +1,13 @@
|
||||
import { Directive } from '@angular/core';
|
||||
import { IonRouterOutlet as IonRouterOutletBase, ProxyCmp } from '@ionic/angular/common';
|
||||
import { defineCustomElement } from '@ionic/core/components/ion-router-outlet.js';
|
||||
|
||||
@ProxyCmp({
|
||||
defineCustomElementFn: defineCustomElement,
|
||||
})
|
||||
@Directive({
|
||||
selector: 'ion-router-outlet',
|
||||
standalone: true,
|
||||
})
|
||||
// eslint-disable-next-line @angular-eslint/directive-class-suffix
|
||||
export class IonRouterOutlet extends IonRouterOutletBase {}
|
||||
@@ -0,0 +1,9 @@
|
||||
describe('Router Outlet', () => {
|
||||
beforeEach(() => {
|
||||
cy.visit('/standalone/router-outlet');
|
||||
})
|
||||
|
||||
it('should render a as a child page of the router outlet', () => {
|
||||
cy.ionPageVisible('ion-router-outlet app-router-outlet');
|
||||
});
|
||||
})
|
||||
@@ -1 +1 @@
|
||||
<router-outlet></router-outlet>
|
||||
<ion-router-outlet></ion-router-outlet>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { Component } from '@angular/core';
|
||||
import { RouterModule } from '@angular/router';
|
||||
|
||||
import { IonRouterOutlet } from '@ionic/angular/standalone';
|
||||
/**
|
||||
* This temporary code initialized Ionic and ensures components are visible.
|
||||
* TODO FW-4766 Can be removed when ticket is implemented
|
||||
@@ -15,7 +15,7 @@ document.querySelector('html')!.classList.add('ion-ce')
|
||||
selector: 'app-root-standalone',
|
||||
templateUrl: './app.component.html',
|
||||
standalone: true,
|
||||
imports: [RouterModule]
|
||||
imports: [RouterModule, IonRouterOutlet]
|
||||
})
|
||||
export class AppComponent {
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ export const routes: Routes = [
|
||||
component: AppComponent,
|
||||
children: [
|
||||
{ path: 'test', loadComponent: () => import('../test/test.component').then(m => m.TestComponent) },
|
||||
{ path: 'router-outlet', loadComponent: () => import('../router-outlet/router-outlet.component').then(m => m.RouterOutletComponent) },
|
||||
]
|
||||
},
|
||||
];
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
This should be visible and rendered inside of an ion-router-outlet.
|
||||
@@ -0,0 +1,8 @@
|
||||
import { Component } from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'app-router-outlet',
|
||||
templateUrl: './router-outlet.component.html',
|
||||
standalone: true
|
||||
})
|
||||
export class RouterOutletComponent {}
|
||||
Reference in New Issue
Block a user