以下是一个示例代码,演示如何使用Angular的路由守卫来在刷新页面时保持当前名称。
首先,创建一个名为AuthGuard
的路由守卫,实现CanActivate
接口:
import { Injectable } from '@angular/core';
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router';
@Injectable({
providedIn: 'root'
})
export class AuthGuard implements CanActivate {
constructor(private router: Router) {}
canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
if (localStorage.getItem('name')) {
return true;
} else {
this.router.navigate(['/login']);
return false;
}
}
}
然后,在你的路由配置中应用这个路由守卫。假设你有一个名为HomeComponent
的组件需要保持当前名称,你可以这样配置路由:
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { HomeComponent } from './home.component';
import { LoginComponent } from './login.component';
import { AuthGuard } from './auth.guard';
const routes: Routes = [
{ path: '', component: HomeComponent, canActivate: [AuthGuard] },
{ path: 'login', component: LoginComponent }
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
在HomeComponent
中,你可以使用localStorage
来保持当前名称。在组件初始化时,从localStorage
中获取名称并赋值给一个名为name
的变量:
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-home',
template: `
Welcome, {{ name }}!
`
})
export class HomeComponent implements OnInit {
name: string;
ngOnInit() {
this.name = localStorage.getItem('name');
}
}
当用户登录时,你可以将名称保存在localStorage
中:
import { Component } from '@angular/core';
@Component({
selector: 'app-login',
template: `
`
})
export class LoginComponent {
name: string;
login() {
localStorage.setItem('name', this.name);
}
}
这样,当用户刷新页面时,HomeComponent
会从localStorage
中获取名称并保持当前名称。