exportinterface CanActivate {
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean;
}
{
path: '',
redirectTo: '/home',
pathMatch: 'full'
}
import{ Observable }from'rxjs/Observable';
import'rxjs/add/observable/of';
@Injectable()
exportclassAuthService{
account: Account;
// simulation to login.
login(role: string): Observable<Account> {
letaccount =newAccount();
account.id = 11;
account.name = 'super man';
account.roles = [role];
this.account = account;
returnObservable.of(account);
}
getAccount(): Account {
returnthis.account;
}
isLogdedin(): boolean {
returnthis.account &&this.account.id !=null;
}
hasRole(role: string): boolean {
returnthis.account &&this.account.roles.includes(role);
}
}
exportconstTodoRoutes: Route[] = [
{
path: 'todo',
children: [
{
path: 'list',
component: TodoListComponent
},
{
path: 'detail/:id',
component: TodoDetailComponent
}
]
}
];
import{ Injectable }from'@angular/core';
import{ CanActivateChild, Router,
ActivatedRouteSnapshot, RouterStateSnapshot } from'@angular/router';
import{ AuthService }from'../services/auth.service';
import{ TodoDetailComponent }from'./detail/detail.component';
@Injectable()
exportclassMyTodoGuardimplementsCanActivateChild{
constructor(private authService: AuthService, private router: Router) {}
canActivateChild(childRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
if(!this.authService.isLogdedin()) {
alert('You need to login!');
this.router.navigate(['/home']);
returnfalse;
}
if(this.authService.hasRole('CUSTOMER')) {
returntrue;
}
returnfalse;
}
}
@Injectable()
exportclassCanLeaveTodoDetailGuardimplementsCanDeactivate<TodoDetailComponent>{
canDeactivate(component: TodoDetailComponent, route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
returnconfirm('Confirm?');
}
}
import{ Injectable }from'@angular/core';
import{ Resolve, ActivatedRouteSnapshot, RouterStateSnapshot }from'@angular/router';
import{ Todo }from'./todo';
import{ TodoService }from'./todo.service';
@Injectable()
exportclassMyTodoResolverimplementsResolve<Todo>{
constructor(private todoService: TodoService) { }
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
console.log('Get my todo list.');
returnthis.todoService.getAllTodos();
}
}
import{ Observable }from'rxjs/Observable';
import'rxjs/add/observable/of';
import'rxjs/add/operator/delay';
// 神略中间的部分
getAllTodos(): Observable<Todo[]> {
lettodo1 =newTodo();
todo1.id = 1;
todo1.title = 'test task 1';
todo1.createdDate = newDate();
todo1.complete = false;
lettodo2 =newTodo();
todo2.id = 2;
todo2.title = 'test task 2';
todo2.createdDate = newDate();
todo2.complete = false;
this.todos = [todo1, todo2];
returnObservable.of(this.todos).delay(3000);
}
exportclassTodoListComponent{
newTodo: Todo = newTodo();
todos: Todo[];
constructor(private todoService: TodoService, private route: ActivatedRoute) {
this.todos =this.route.snapshot.data['todos'];
}
// 省略其他
}
exportconstTodoRoutes: Route[] = [
{
path: 'todo',
canActivateChild: [MyTodoGuard],
children: [
{
path: 'list',
component: TodoListComponent,
resolve: { todos: MyTodoResolver }
},
{
path: 'detail/:id',
component: TodoDetailComponent,
canDeactivate: [ CanLeaveTodoDetailGuard ]
}
]
}
];
@NgModule({
imports: [CommonModule, FormsModule ],
declarations: [TodoListComponent, TodoDetailComponent, TodoItemComponent],
providers: [TodoService, MyTodoResolver, MyTodoGuard, CanLeaveTodoDetailGuard]
})
exportclassTodoModule{}
exportconstTodoRoutes: Route[] = [
{
path: 'todo',
data: {
role: 'CUSTOMER'
},
canActivateChild: [MyTodoGuard],
children: [
{
path: 'list',
component: TodoListComponent,
resolve: {
todos: MyTodoResolver
},
data: {
title: '列表'
}
},
{
path: 'detail/:id',
component: TodoDetailComponent,
canDeactivate: [ CanLeaveTodoDetailGuard ],
data: {
title: '详情'
}
}
]
}
];
exportclassTodoListComponent{
newTodo: Todo = newTodo();
todos: Todo[];
title: string;
constructor(private todoService: TodoService, private route: ActivatedRoute) {
this.todos =this.route.snapshot.data['todos'];
this.title =this.route.data['title'];
}
// 省略其他
}
@Injectable()
exportclassMyTodoGuardimplementsCanActivateChild{
canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
if(!this.authService.isLogdedin()) {
alert('You need to login!');
this.router.navigate(['/home']);
returnfalse;
}
letrequiredRole = next.data['role'];
if(requiredRole ==null||this.authService.hasRole(requiredRole)) {
returntrue;
}
returnfalse;
}
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有