要在Angular中重定向到另一个组件并从主题中读取值,可以使用路由参数和共享服务的组合。
首先,创建一个共享服务来存储主题值。在共享服务中,创建一个公共属性来存储主题值,并创建一个方法来获取和设置主题值。
import { Injectable } from '@angular/core';
@Injectable()
export class ThemeService {
private theme: string;
getTheme(): string {
return this.theme;
}
setTheme(theme: string): void {
this.theme = theme;
}
}
然后,在源组件中,使用路由参数将主题值传递给目标组件,并在导航时设置主题值。
import { Component } from '@angular/core';
import { Router } from '@angular/router';
import { ThemeService } from './theme.service';
@Component({
selector: 'app-source',
template: `
`
})
export class SourceComponent {
constructor(private router: Router, private themeService: ThemeService) {}
redirectToTarget(): void {
const theme = 'dark'; // 从某个地方获取主题值
this.themeService.setTheme(theme);
this.router.navigate(['/target', { theme }]);
}
}
在目标组件中,使用ActivatedRoute服务来获取路由参数中的主题值,并在需要时从主题服务中获取主题值。
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { ThemeService } from './theme.service';
@Component({
selector: 'app-target',
template: `
Target Component
Theme: {{ theme }}
`
})
export class TargetComponent implements OnInit {
theme: string;
constructor(private route: ActivatedRoute, private themeService: ThemeService) {}
ngOnInit(): void {
this.theme = this.route.snapshot.paramMap.get('theme');
this.themeService.setTheme(this.theme);
this.theme = this.themeService.getTheme();
}
}
最后,在模块中声明和提供这些组件和服务。
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { RouterModule, Routes } from '@angular/router';
import { AppComponent } from './app.component';
import { SourceComponent } from './source.component';
import { TargetComponent } from './target.component';
import { ThemeService } from './theme.service';
const routes: Routes = [
{ path: 'source', component: SourceComponent },
{ path: 'target', component: TargetComponent },
];
@NgModule({
imports: [BrowserModule, RouterModule.forRoot(routes)],
declarations: [AppComponent, SourceComponent, TargetComponent],
providers: [ThemeService],
bootstrap: [AppComponent]
})
export class AppModule {}
现在,当点击“Redirect to Target Component”按钮时,将重定向到目标组件,并从主题服务中读取和显示主题值。
请注意,这只是一个示例,你可以根据你的具体需求进行修改和改进。