登录后隐藏侧边栏

时间:2021-05-24 07:39:17

标签: javascript html angular typescript bootstrap-4

我想要一个响应式页面,当登录页面加载时它应该隐藏侧边栏并且登录页面应该跨越整页。用户登录后,它应该显示带有所有组件的侧栏。我用下面的代码尝试了几种方法。

app.component.html:

<div class="row">
  <div *ngIf="isLoggedUser == 'true'" class="col-lg-3 col-md-3 col-sm-3">
    <app-sidebar></app-sidebar>
  </div>
  <div class="col-lg-9 col-md-9 col-sm-9">
    <router-outlet></router-outlet>
  </div>
</div>

app.component.ts

import { Component, OnInit, VERSION } from '@angular/core';

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
  name = 'Angular ' + VERSION.major;
  isLoggedUser: any;

  ngOnInit() {
    this.isLoggedUser = sessionStorage.getItem('isLogged');
    if (sessionStorage.getItem('isLogged') === 'true') {
      this.isLoggedUser = 'true';
    } else {
      this.isLoggedUser = 'false';
    }
  }
}

login.component.html

<form>
  <div class="form-group">
    <label for="exampleInputEmail1">Email address</label>
    <input type="email" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp" placeholder="Enter email">
    <small id="emailHelp" class="form-text text-muted">We'll never share your email with anyone else.</small>
  </div>
  <div class="form-group">
    <label for="exampleInputPassword1">Password</label>
    <input type="password" class="form-control" id="exampleInputPassword1" placeholder="Password">
  </div>
  <div class="form-check">
    <input type="checkbox" class="form-check-input" id="exampleCheck1">
    <label class="form-check-label" for="exampleCheck1">Check me out</label>
  </div>
  <button type="submit" (click)="login()" class="btn btn-primary">Submit</button>
</form>

login.component.ts

import { Component, OnInit } from '@angular/core';
import { Router, ActivatedRoute } from '@angular/router';

@Component({
  selector: 'app-login',
  templateUrl: './login.component.html',
  styleUrls: ['./login.component.css']
})
export class LoginComponent implements OnInit {
  isLoggedUser: any;

  constructor(private router: Router) {}

  ngOnInit() {
    sessionStorage.setItem('isLogged', 'false');
  }

  login() {
    this.isLoggedUser = sessionStorage.setItem('isLogged', 'true');
    this.router.navigate(['/users']);
  }
}

在这里,我试图在会话存储中存储一个变量,在用户登录之前,isLoggedUser 标志将为 false,因此不会显示侧边栏。用户点击登录后, isLoggedUser 将变为 true ,但在我重新加载页面之前不会显示侧栏。有人可以指导代码中的错误/错误是什么。并且页面对中小屏幕没有响应

StackBlitz(演示):stackblitz

1 个答案:

答案 0 :(得分:0)

将登录方法从 login.component.ts 更改为这种:

login() {
    this.isLoggedUser = 'true';
    sessionStorage.setItem('isLogged', 'true');
    this.router.navigate(['/users']);
  }

注意:sessionStorage.setItem('isLogged', 'true'); 不返回任何内容,因此 this.isLoggedUser 被设置为 undefined

我刚换了

this.isLoggedUser = sessionStorage.setItem('isLogged', 'true');

this.isLoggedUser = 'true';
sessionStorage.setItem('isLogged', 'true');

还需要共享变量 isLoggedUser 以便当您在登录组件中更新它时,它的值也会在应用程序组件中反映出来。