angular 路由守卫
一. canActive 使用场景:导航栏某个标签,如用户设置页面,只有登录才可以查看,不登录则点击无效
说明: canActive--是否能调用当前路由
实现:
1. 创建路由守卫类
2. 在 app-routing.module.ts 或者在 app.modules.ts 中注入
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule],
providers: [LoginGuard, UnsaveGuard]
})
3. 在 app-routing.module.ts 中配置
import { LoginGuard } from './loginGuard/login.guard'
import { UnsaveGuard } from './loginGuard/unsave.guard'
const routes: Routes = [
{ path: '', redirectTo: 'home', pathMatch: 'full' },
{ path: 'app', component: AppComponent },
{ path: 'directive', component: TemplateDirective },
{ path: 'book', component: TemplateBookComponent, children: bookChildrenRoutes},
{ path: 'details/:id', component: bookDetailsComponent },
{ path: 'usersetting', component: UserSettingsComponent, canActivate: [LoginGuard], canDeactivate: [UnsaveGuard]},
{ path: 'home', component: HomeComponent},
];
4. 使用,在 home 页面有登录和退出的按钮,点击改变登录状态,查看路由的可访问性
import { LoginGuard } from '../loginGuard/login.guard'
export class HomeComponent implements OnInit {
constructor( private loginGuard: LoginGuard ) { }
loginIn() { alert("登录") this.loginGuard.login() }
loginOut() { alert("退出") this.loginGuard.loginOut() }
ngOnInit() { }
}
二. CanDetivate 使用场景: 用户设置页面,如果没点击保存,提示用户,点击了保存直接离开
说明: CanDetivate--是否可以离开路由
实现:
1. 创建 canDetivate 类
import { CanDeactivate } from '@angular/router'
import { UserSettingsComponent } from '../user-settings/user-settings.component'
// UserSettingsComponent--要守卫的组件类
export class UnsaveGuard implements CanDeactivate<UserSettingsComponent> {
saveState: boolean = false
/* return true 直接离开 return false 不能离开该路由 */
canDeactivate(component: UserSettingsComponent) {
if(this.saveState) {
return true
}else {
return window.confirm("您还没保存,确认离开吗?")
}
}
changeSaveState() {
this.saveState = true
}
}
2. 在 app-routing.module.ts 或者在 app.modules.ts 中注入
3. 在 app-routing.module.ts 中配置
4. 使用,在设置页面保存按钮,点击后直接离开,不点击离开时提示用户
三 . resolve -- 守卫
(未完待续)
代码路径访问: https://github.com/kefaze/ang
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)