在单个组件中使用 Router for web 和 RouterExtensions for mobile
Using Router for web and RouterExtensions for mobile in a single component
我正在尝试在我的项目中在 Web 和移动应用程序版本之间共享代码。
我有一个需要编程导航的组件,因此我需要为 Web 版本注入 Angular Router(来自 '@angular/router')和 NativeScript RouterExtensions(来自 '@nativescript/angular') 用于移动版本。是否有推荐的方法将依赖项“动态地”注入组件,以便编译的每个目标都获得正确的依赖项?
第一步你应该创建一个注入令牌
// src/app/tokens.ts
import {InjectionToken} from '@angular/core';
export const UNIVERSAL_ROUTER = new InjectionToken<string>('Custom router');
之后,在与 Web 应用程序相关的模块中(我假设它是 app.module.ts
),您在供应商列表中定义它
// src/app/app.module.ts
...
import {Router, RouterModule} from '@angular/router';
import {UNIVERSAL_ROUTER} from '~/app/tokens';
@NgModule({
imports: [...],
declarations: [...],
providers: [
{provide: UNIVERSAL_ROUTER, useExisting: Router},
],
bootstrap: [AppComponent],
})
export class AppModule {}
同时,您在声明移动应用程序(即 app.module.tns.ts
)的模块中将此令牌定义为 RouterExtension
:
// src/app/app.module.tns.ts
...
import {NativeScriptRouterModule, RouterExtensions} from 'nativescript-angular/router';
import {UNIVERSAL_ROUTER} from '~/app/tokens';
@NgModule({
imports: [...],
declarations: [...],
providers: [
{provide: UNIVERSAL_ROUTER, useClass: RouterExtensions},
],
bootstrap: [AppComponent],
schemas: [NO_ERRORS_SCHEMA],
})
export class AppModule {}
完成后,您可以通过 @Inject
装饰器注入路由器,例如
constructor(@Inject(UNIVERSAL_ROUTER) private router) {}
并在任何需要的地方获得特定于平台的路由器。
我正在尝试在我的项目中在 Web 和移动应用程序版本之间共享代码。
我有一个需要编程导航的组件,因此我需要为 Web 版本注入 Angular Router(来自 '@angular/router')和 NativeScript RouterExtensions(来自 '@nativescript/angular') 用于移动版本。是否有推荐的方法将依赖项“动态地”注入组件,以便编译的每个目标都获得正确的依赖项?
第一步你应该创建一个注入令牌
// src/app/tokens.ts
import {InjectionToken} from '@angular/core';
export const UNIVERSAL_ROUTER = new InjectionToken<string>('Custom router');
之后,在与 Web 应用程序相关的模块中(我假设它是 app.module.ts
),您在供应商列表中定义它
// src/app/app.module.ts
...
import {Router, RouterModule} from '@angular/router';
import {UNIVERSAL_ROUTER} from '~/app/tokens';
@NgModule({
imports: [...],
declarations: [...],
providers: [
{provide: UNIVERSAL_ROUTER, useExisting: Router},
],
bootstrap: [AppComponent],
})
export class AppModule {}
同时,您在声明移动应用程序(即 app.module.tns.ts
)的模块中将此令牌定义为 RouterExtension
:
// src/app/app.module.tns.ts
...
import {NativeScriptRouterModule, RouterExtensions} from 'nativescript-angular/router';
import {UNIVERSAL_ROUTER} from '~/app/tokens';
@NgModule({
imports: [...],
declarations: [...],
providers: [
{provide: UNIVERSAL_ROUTER, useClass: RouterExtensions},
],
bootstrap: [AppComponent],
schemas: [NO_ERRORS_SCHEMA],
})
export class AppModule {}
完成后,您可以通过 @Inject
装饰器注入路由器,例如
constructor(@Inject(UNIVERSAL_ROUTER) private router) {}
并在任何需要的地方获得特定于平台的路由器。