发表于: 2019-08-01 21:21:30

1 904


今天完成的事情:(一定要写非常细致的内容,比如说学会了盒子模型,了解了Margin) 
明天计划的事情:(一定要写非常细致的内容) 
遇到的问题:(遇到什么困难,怎么解决的)

收获:(通过今天的学习,学到了什么知识)

1.路由卫士:

创建路由后,任何用户都能在任何时候导航到任何地方。 但有时候这样是不对的。 该用户可能无权导航到目标组件。 可能用户得先登录(认证)。 在显示目标组件前,你可能得先获取某些数据。 在离开组件前,你可能要先保存修改。 你可能要询问用户:你是否要放弃本次更改,而不用保存它们? 你可以往路由配置中添加守卫,来处理这些场景。 守卫返回一个值,以控制路由器的行为: 如果它返回 true,导航过程会继续 如果它返回 false,导航过程会终止,且用户会留在原地。

守卫还可以告诉路由器导航到别处,这样也取消当前的导航。 守卫可以用同步的方式返回一个布尔值。但在很多情况下,守卫无法用同步的方式给出答案。 守卫可能会向用户问一个问题、把更改保存到服务器,或者获取新数据,而这些都是异步操作。 因此,路由的守卫可以返回一个 Observable或 Promise,并且路由器会等待这个可观察对象被解析为 true 或 false。


使用路由卫士的方法

利用CANACTIVATE接口及 LOCALSTORAGE

新增卫士服务,负责认证和授权资源


angular6路由卫士设置方法:

新增卫士服务

// src/app/serve/auth-guard.service.ts

import { Injectable } from '@angular/core';

import { Router, CanActivate } from '@angular/router';


@Injectable()

export class AuthGuardService implements CanActivate {

  constructor(public router: Router) {}

  canActivate(): boolean {

    if (localStorage.getItem('username') === null) {      // 验证登录状态

      this.router.navigate(['/login']);                   // 重定向

      return false;

    }

    return true;

  }

}

导入路由模块


// src/app/app.routing.module.ts

import { Routes, CanActivate } from '@angular/router'; // 导入依赖


import { 

  AuthGuardService as AuthGuard 

} from '../app/serve/auth-guard.service';             // 导入服务

const routes: Routes = [

  { path: '', redirectTo: '/login', pathMatch: 'full' },

  { path: 'login', component: AdminLoginComponent },

  {

    path: 'global',

    component: GlobalComponent,

    children: childRoutes,

    canActivate: [AuthGuard]          // 添加验证服务

  }

];

@NgModule({

...

  providers: [ AuthGuard ],        // 添加提供者

})


登录时:


... 

 if (this.data.code === 0) {                //  用户名密码验证成功

      localStorage.setItem('username', 'admin');  

      this.router.navigate([`../global`]);          

        }

...

退出时:


logout() {

    localStorage.removeItem('username');

    this.router.navigate(['/login']);

  }



2.      

1.如何选取本地存储:

根据特性使用,若需要永久存储,则选择localStorage,若需要关闭网页就销毁数据,则选择sessionStorage

2.完全没必要用Cookie吗?

不是,虽然cookie有着诸多缺点,但cookie也有许多不可替代的特性,比如可以灵活的设置过期时间,也可以设置作用域。能在服务器和客户端进行数据交互。

3.WebStorage的数据可以上传到服务器吗?

Webstorage不会传递到服务器端,且webStorage就是为了解决cookie频繁在服务器和客户端交互的弊端而设,webstorage就是为了在客户端存储数据而生,不应舍本逐末。



返回列表 返回列表
评论

    分享到