刷新页面后Angular 8松散数据

阿尔祖·苏莱曼诺夫(Arzu Suleymanov)

我有isAdmin布尔属性,正在检查以用户或admin身份登录的用户。后端是.net core 2.2,db-Postgre。一切正常,但是刷新后我失去了isAdmin的值。我有条件的show hide下拉列表,仅适用于管理员角色。刷新后如何不丢失数据?PS如何为isAdmin属性也向我的后卫添加逻辑?我的组件看起来像:

 model: any = {};

  constructor(public authService: AuthService, private alertify: AlertifyService, private router: 
   Router) { }

  ngOnInit() {

  }


  login() {
    this.authService.login(this.model).subscribe(next => {
      this.model.isAdmin = true;
      this.alertify.success('Logged in as Admin')
    }, error => {
      this.alertify.error(error)
    }, () => {
      this.router.navigate(['/projects'])
    })
  }

  loginAsUser() {
    this.authService.loginAsUser(this.model).subscribe(next => {     
      this.model.isAdmin = false;
      this.alertify.success('Logged in as User')
    }, error => {
      this.alertify.error(error)
    }, () => {
      this.router.navigate(['/home'])
    })
  }

  loggedIn() {
    return this.authService.loggedIn();
  }

  logout() {
    localStorage.removeItem('token');
    this.alertify.message('logged out');
    this.router.navigate(['/home'])
  }

我的html看起来像:

<nav class="navbar navbar-expand-md navbar-light fixed-top bg-light">
  <div class="container">
    <a class="navbar-brand" [routerLink]="['/home']">
      <img [src]="iteraLogo" alt="Itera">
    </a>

    <div *ngIf="loggedIn()" class="dropdown" dropdown [hidden]="!model.isAdmin">
      <a class="dropdown-toggle" dropdownToggle>
        <strong class="text-primary">Admin Panel</strong>
      </a>
      <div class="dropdown-menu mt-4" *dropdownMenu>
        <ul class="navbar-nav">
          <li class="nav-item" routerLinkActive="router-link-active">
            <a class="nav-link" [routerLink]="['/projects']">Projects</a>
          </li>
          <li class="nav-item" routerLinkActive="router-link-active">
            <a class="nav-link" [routerLink]="['/hypervisors']">Hypervisors</a>
          </li>
          <li class="nav-item" routerLinkActive="router-link-active">
            <a class="nav-link" [routerLink]="['/management']">Management</a>
          </li>
          <li class="nav-item" routerLinkActive="router-link-active">
            <a class="nav-link" [routerLink]="['/users']">Users</a>
          </li>
          <li class="nav-item" routerLinkActive="router-link-active">
              <a class="nav-link" [routerLink]="['/user-projects']">Users Projects</a>
            </li>
        </ul>
      </div>
    </div>

    <ul class="navbar-nav mr-auto">
      <li class="nav-item" routerLinkActive="router-link-active">
        <a class="nav-link" [routerLink]="['/test']">About</a>
      </li>
    </ul>
    <div *ngIf="loggedIn()" class="dropdown" dropdown>
      <a class="dropdown-toggle" dropdownToggle>
        Welcome <strong>{{ authService.decodedToken?.unique_name | titlecase }}</strong>
      </a>
      <div class="dropdown-menu mt-3" *dropdownMenu>
        <a class="dropdown-item text-primary" [routerLink]="['/projects/', 
          authService.decodedToken?.nameid ]"><i class="fa fa-archive">&nbsp;My Projects</i></a>
        <div class="dropdown-divider"></div>
        <a class="dropdown-item text-danger" (click)="logout()"><i class="fa fa-sign- 
        out">&nbsp;Logout</i></a>
      </div>
    </div>

    <form *ngIf="!loggedIn()" #loginForm="ngForm" class="form-inline my-2 my-lg-0">
      <div class="input-group">
        <div class="input-group-prepend">
          <div class="input-group-text">
            <i class="fa fa-user-circle-o text-primary" aria-hidden="true"></i>
          </div>
        </div>
        <input class="form-control" placeholder="Username" name="username" required 
        [(ngModel)]="model.username" />
      </div>

      <div class="input-group">
        <div class="input-group-prepend">
          <div class="input-group-text">
            <i class="fa fa-unlock text-danger" aria-hidden="true"></i>
          </div>
        </div>
        <input class="form-control" placeholder="Password" name="password" required type="password"
          [(ngModel)]="model.password" />
      </div>
      <div>
        <button [disabled]="!loginForm.valid" type="submit" (click)="loginAsUser()" class="btn btn-primary my-2 my-sm-0">
          <i class="fa fa-user-circle" aria-hidden="true"></i>&nbsp;User
        </button>
        <button [disabled]="!loginForm.valid" type="submit" (click)="login()" class="btn btn-success 
           my-2 my-sm-0">
          <i class="fa fa-user-secret" aria-hidden="true"></i>&nbsp;Admin
        </button>
      </div>
    </form>

  </div>
</nav>

我的守卫看起来像:

 canActivate(): boolean {
    if(this.authService.loggedIn()) {
      return true
    }    

    this.alertify.error('You have no access to see this page!!!');
    this.router.navigate(['/home']);
    return false;
  }
拉胡尔·沙玛(Rahul Sharma)

刷新页面时,页面不会保留变量值,您需要将其存储在本地存储或cookie中。

解决此问题的一种简单方法是使用以下库:

https://www.npmjs.com/package/ng2-cookies

要安装此库,请运行:

npm install ng2-cookies

零件

import { Cookie } from 'ng2-cookies/ng2-cookies';

ngOnInit() {
    this.model.isAdmin = Cookie.get('isAdmin');
}

login() {
    this.authService.login(this.model).subscribe(next => {
      Cookie.set('isAdmin', 'true');
      this.alertify.success('Logged in as Admin')
    }, error => {
      this.alertify.error(error)
    }, () => {
      this.router.navigate(['/projects'])
    })
}

您也可以使用ngx-cookie-service

https://www.npmjs.com/package/ngx-cookie-service

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

刷新页面angular 8时丢失数据

来自分类Dev

使用来自承诺的数据刷新页面后触发 Angular 2 管道

来自分类Dev

在本地使用browserHistory刷新页面后,数据消失

来自分类Dev

停止刷新页面-页面刷新后保留页面数据

来自分类Dev

如何保持数据刷新页面?

来自分类Dev

刷新页面后不接受utf8 html输入标签

来自分类Dev

刷新页面后,如何确保从localStorage显示正确的数据?

来自分类Dev

刷新页面后如何保留用户数据?

来自分类Dev

在JavaScript中刷新页面后,如何更新数据库中表的星级?

来自分类Dev

即使在使用 ngStorage 刷新页面后也显示 CRUD 表数据

来自分类Dev

刷新页面上的Angular8应用http错误405

来自分类Dev

在刷新页面时保留页面数据

来自分类Dev

单击链接刷新页面并发送POST数据?

来自分类Dev

更新页面上的数据而无需刷新

来自分类Dev

在刷新页面时重新创建数据

来自分类Dev

刷新页面时AngularJS数据丢失

来自分类Dev

更新SQL数据而不刷新页面

来自分类Dev

从存储中获取数据不会刷新页面内容

来自分类Dev

必须刷新页面才能从api获取数据

来自分类Dev

Python Dash刷新页面未更新源数据

来自分类Dev

在刷新页面时停止重新提交数据,PHP

来自分类Dev

在刷新页面时重新创建数据

来自分类Dev

jQuery无法刷新页面上的数据?

来自分类Dev

获取数据并提交而不刷新页面

来自分类Dev

更新页面上的数据而不用 Vue 刷新?

来自分类Dev

Laravel & Ajax 加载数据而不刷新页面

来自分类Dev

为什么Jira和Confluence数据中心管理员在刷新页面后自动注销?

来自分类Dev

从Javascript接收数据后重定向到新页面

来自分类Dev

刷新页面后菜单消失Angular

Related 相关文章

热门标签

归档